原文作者:aircraft

  原文链接:https://www.cnblogs.com/DOMLX/p/17270107.html

加工的泛型类如下:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Serialization; namespace Data
{
public class XMLSerializer<T>
{ public static bool Save(T obj, string flieName)
{
string dir = Path.GetDirectoryName(flieName);
if (!Directory.Exists(dir))
Directory.CreateDirectory(dir);
try
{
if (flieName.Trim().Length == 0)
return false;
string strFolder = Path.GetDirectoryName(flieName); XmlSerializer xs = new XmlSerializer(typeof(T));
using (FileStream fs = new FileStream(flieName, FileMode.Create))
{
xs.Serialize(fs, obj);
//fs.Close ();
}
return true;
}
catch (Exception ex)
{
MessageBox.Show("序列化保存时出错,出错原因为:" + ex.ToString());
return false;
}
} public static T Load(string fileName)
{
if (File.Exists(fileName) == false)
{
return default(T);
} T obj = default(T);
try
{
XmlSerializer xml = new XmlSerializer(typeof(T)); using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
{
obj = (T)xml.Deserialize(fs);
//fs.Close ();
}
}
catch (Exception ex)
{
MessageBox.Show("序列化读取时出错,出错原因为:" + ex.ToString());
return default(T);
}
return obj;
} public static T Clone(T target)
{
T obj = default (T);
try
{
MemoryStream ms = new MemoryStream ();
XmlSerializer xml = new XmlSerializer (typeof (T));
xml.Serialize (ms, target);
ms.Seek (0, SeekOrigin.Begin);
obj = (T)xml.Deserialize (ms);
}
catch (Exception ex)
{
MessageBox.Show ("拷贝时出错,出错原因为:" + ex.ToString ());
return default (T);
}
return obj;
}
}
}

例如我们有个简单的类

 class Apply
{
[CategoryAttribute("基本参数"), DisplayName("片数")]
public int WaferNum { get; set; } = 25;
[CategoryAttribute("基本参数"), DisplayName("文件原路径")]
public string OriFilePath { get; set; } = "D:\\Data"; }

需要去导入,保存,深拷贝复制,我们就可以这样调用

Apply apply = new Apply();

XMLSerializer<Apply>.Save(apply , "D:\\Appply.xml");

Apply apply = XMLSerializer<Apply>.Load( "D:\\Appply.xml");

//也可以作为类的复制快捷方式来使用--例如下面类这样
class App
{ int a = 0; public App Clone()
{
App a;
a = XMLSerializer<App>.Clone(this);
return a;
} }

若有兴趣交流分享技术,可关注本人公众号,里面会不定期的分享各种编程教程,和共享源码,诸如研究分享关于c/c++,python,前端,后端,opencv,halcon,opengl,机器学习深度学习之类有关于基础编程,图像处理和机器视觉开发的知识

c# 对序列化类XMLSerializer 二次封装泛型化方便了一些使用的步骤的更多相关文章

  1. drf序列化高级、自定义只读只写、序列化覆盖字段、二次封装Response、数据库查询优化(断关联)、十大接口、视图家族

    目录 自定义只读 自定义只写 序列化覆盖字段 二次封装Response 数据库关系分析 断外键关联关系 ORM操作外键关系 ORM四种关联关系 基表 系列化类其他配置(了解) 十大接口 BaseSer ...

  2. APP自动化针对PO模式进行二次封装之basepage

    APP自动化跟WEB自动化所使用的框架基本一样,都是采用的PO模式结合pytest框架编写自动化测试脚本,为了提高代码的复用性.稳定性和易维护性,我们针对PO模式进行了二次封装,将日志,等待以及异常截 ...

  3. web自动化针对PO模式进行二次封装之basepage

    在PO模式当中,我们做到了页面对象与测试用例的分离,但在页面对象编写时,我们仍然还有优化的空间.页面对象有一些共同的基本操作,可以封装起来,并可以在基本操作当中加上日志和异常截图的处理.比如说我们在查 ...

  4. Python笔记_第四篇_高阶编程_二次封装

    1.二次封装: 二次封装其实就是对一个类或者一个方法进行二次的改造增加新的功能. 2.一个类的二次封装: 我们以一个进程为例,我们把Process这个库进行二次封装,增加一些功能,在调用. thoma ...

  5. 二次封装Response类 | 视图类传递参数给序列化类context

    二次封装Response类 源码: class Response(SimpleTemplateResponse): """ An HttpResponse that al ...

  6. DRF框架(五)——context传参,二次封装Response类,两个视图基类(APIView/GenericAPIView),视图扩展类(mixins),子类视图(工具视图),视图集(viewsets),工具视图集

    复习 1.整体修改与局部修改 # 序列化get (给前端传递参数) #查询 ser_obj = ModelSerializer(model_obj) #只传递一个参数,默认是instance的参数,查 ...

  7. 基于Dapper二次封装了一个易用的ORM工具类:SqlDapperUtil

    基于Dapper二次封装了一个易用的ORM工具类:SqlDapperUtil,把日常能用到的各种CRUD都进行了简化封装,让普通程序员只需关注业务即可,因为非常简单,故直接贴源代码,大家若需使用可以直 ...

  8. python mysql redis mongodb selneium requests二次封装为什么大都是使用类的原因,一点见解

    1.python mysql  redis mongodb selneium requests举得这5个库里面的主要被用户使用的东西全都是面向对象的,包括requests.get函数是里面每次都是实例 ...

  9. 《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)

    1.简介 上一篇宏哥介绍了如何设计支持不同浏览器测试,宏哥的方法就是通过来切换配置文件设置的浏览器名称的值,来确定启动什么浏览器进行脚本测试.宏哥将这个叫做浏览器引擎类.这个类负责获取浏览器类型和启动 ...

  10. FMDB 二次封装工具类,让你快速学会封装,集成数据库

    来源:StrivEver 链接:http://www.jianshu.com/p/4c77aee0b41c 上个版本为了增加用户体验,部分页面集成了离线缓存数据功能,于是就在项目里使用了数据库管理离线 ...

随机推荐

  1. 2024 盘古石数据取证 服务器部分wp

    1. 分析内部IM服务器检材,在搭建的内部即时通讯平台中,客户端与服务器的通讯端口是:[答案格式:8888][★☆☆☆☆] 8065 2. 分析内部IM服务器检材,该内部IM平台使用的数据库版本是: ...

  2. 《前端运维》一、Linux基础--11服务

    首先服务的概念,对于linux服务器来说,其中大多数的软件都算是服务,比如nginx.mysql.Jenkins等等.下面我们就来学习一下linux中有关服务的一些内容. 一.服务简介和分类 1.运行 ...

  3. ABAP开发规范V1.0

    1. 概要 1.1目的 该文档定义了在开发与维护ABAP程序过程中必须遵守的规范与标准.该文档应当被视为一个动态的文档,该文档会根据需要进行增补和修订. 开发规范的重要作用在于保持整个开发团队的开发风 ...

  4. TypeScript 总结

    js 类型分为两种:基本数据类型和复杂数据类型 基本数据类型主要有:number.string.boolean.null.undefined.symbo(es6新增).BigInt(es10新增) t ...

  5. ChatGPT生成接口测试用例(一)

    接口测试在软件开发生命周期中扮演着至关重要的角色,有助于验证不同模块之间的交互是否正确.若协议消息被恶意修改,系统是否能够恰当处理,以确保系统的功能正常运行,不会出现宕机或者安全问题. 5.1 Cha ...

  6. 深入理解二叉查找树(BST)的重要查找操作

    二叉查找树 (Binary Search Tree, 简称 BST) 是一种基本的数据结构,其设计核心在于每个节点的值都满足以下性质: 左子树的所有节点值均小于当前节点值. 右子树的所有节点值均大于当 ...

  7. Web浏览器播放rtsp视频流详细解决方案

    1.背景 在当前项目中,需要实现Web端直接播放RTSP视频流.该功能的核心目标是使得用户能够通过浏览器观看来自不同品牌的IPC(Internet Protocol Camera)设备的实时视频流.主 ...

  8. Qt编写安防视频监控系统48-视频参数

    一.前言 视频参数之前在基本参数中,后面越来越多,直接独立了出来,甚至还拆分出来了视频参数1.视频参数2,参数越来越多分组也越来越多的时候,你会发现分组名称都不够用或者不方便命名,不能直观的表示该分组 ...

  9. Web网页端IM产品RainbowChat-Web的v7.1版已发布

    一.关于RainbowChat-Web RainbowChat-Web是一套Web网页端IM系统,是RainbowChat的姊妹系统(RainbowChat是一套基于开源IM聊天框架 MobileIM ...

  10. 网络编程懒人入门(十四):到底什么是Socket?一文即懂!

    本文由cxuan分享,原题"原来这才是 Socket",有修订. 1.引言 本系列文章前面那些主要讲解的是计算机网络的理论基础,但对于即时通讯IM这方面的应用层开发者来说,跟计算机 ...