原文作者: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. ZCMU-1136

    思路 一个数学问题 要知道1为奇数,2^x次方一定为偶数. 偶数=奇数+奇数,而奇数=奇数*奇数,所以x一定要是奇数才可以. 注意 没告诉范围所以要往大的方向考虑 其中1能够被任一整数整除,所以前面加 ...

  2. 如何给自己的网站添加live2D女仆

    <script type="text/javascript" charset="utf-8"  src="https://files.cnblo ...

  3. 金仓数据库数据迁移实战:从MySQL到KES的顺利迁移

    今天我们将开始实践金仓数据库的数据迁移功能.在此之前,我们一直使用的是简化版的 Docker 镜像,这个版本并没有集成可视化操作工具.因此,为了更方便地进行后续的操作,我们需要额外下载一个 Windo ...

  4. 【Amadeus原创】从域副域控无法同步的解决方法

    强制同步指令:repadmin /syncall /force 同步查询:repadmin.exe /replsummary

  5. Terraform Aliyun 创建ecs, kubernetes 实例

    Terraform Aliyun 创建ecs, kubernetes 实例 terraform demo for aliyun 创建vpc, 网关, EIP, ecs, kubernetes, Ser ...

  6. 【PHP】读取本地文件夹中所有图片并显示

    <? //获取文件夹下的所有文件 $dir_str = ''; $imgType = array('gif','png','jpg','jpeg','bmp'); $handle = opend ...

  7. ARGOCD用户管理

    1.创建用户alice kubectl apply -f argocd-cm.yaml apiVersion: v1 kind: ConfigMap metadata: name: argocd-cm ...

  8. Spring注解之-@ConditionalOnExpression表达式

    @ConditionalOnExpression("'true") 当括号中的内容为true时,使用该注解的类被实例化,支持语法如下: @ConditionalOnExpressi ...

  9. 绞尽脑汁终于搞定/天地图标注点marker旋转/任意角度旋转/无需引入其他框架

    一.前言说明 在其他地图组件中,标注点marker都是可以设置旋转角度的,这个功能其实非常实用,比如飞机移动轨迹,就是需要旋转飞机头飞行,轮船轨迹移动也是,百度地图和腾讯地图是通过调用setRotat ...

  10. Qt编写物联网管理平台43-告警短信转发

    一.前言 系统在运行过程中,会实时采集设备的数据,当采集到的数据发生报警后,可以将报警信息以短信的形式发送给指定的管理员(可以是多个),这样管理员就算不在现场,也能第一时间知道哪里发生了报警,可以紧急 ...