翼度科技»论坛 编程开发 .net 查看内容

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

2

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
 
 
 
  原文作者:aircraft
  原文链接:https://www.cnblogs.com/DOMLX/p/17270107.html
 
 
加工的泛型类如下:
 
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using System.Windows.Forms;
  8. using System.Xml.Serialization;
  9. namespace Data
  10. {
  11.     public class XMLSerializer<T>
  12.     {
  13.         public static bool Save(T obj, string flieName)
  14.         {
  15.             string dir = Path.GetDirectoryName(flieName);
  16.             if (!Directory.Exists(dir))
  17.                 Directory.CreateDirectory(dir);
  18.             try
  19.             {
  20.                 if (flieName.Trim().Length == 0)
  21.                     return false;
  22.                 string strFolder = Path.GetDirectoryName(flieName);
  23.                 XmlSerializer xs = new XmlSerializer(typeof(T));
  24.                 using (FileStream fs = new FileStream(flieName, FileMode.Create))
  25.                 {
  26.                     xs.Serialize(fs, obj);
  27.                     //fs.Close ();
  28.                 }
  29.                 return true;
  30.             }
  31.             catch (Exception ex)
  32.             {
  33.                 MessageBox.Show("序列化保存时出错,出错原因为:" + ex.ToString());
  34.                 return false;
  35.             }
  36.         }
  37.         public static T Load(string fileName)
  38.         {
  39.             if (File.Exists(fileName) == false)
  40.             {
  41.                 return default(T);
  42.             }
  43.             T obj = default(T);
  44.             try
  45.             {
  46.                 XmlSerializer xml = new XmlSerializer(typeof(T));
  47.                
  48.                 using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
  49.                 {
  50.                     obj = (T)xml.Deserialize(fs);
  51.                     //fs.Close ();
  52.                 }
  53.             }
  54.             catch (Exception ex)
  55.             {
  56.                 MessageBox.Show("序列化读取时出错,出错原因为:" + ex.ToString());
  57.                 return default(T);
  58.             }
  59.             return obj;
  60.         }
  61.         public static T Clone(T target)
  62.         {
  63.             T obj = default (T);
  64.             try
  65.             {
  66.                 MemoryStream ms = new MemoryStream ();
  67.                 XmlSerializer xml = new XmlSerializer (typeof (T));
  68.                 xml.Serialize (ms, target);
  69.                 ms.Seek (0, SeekOrigin.Begin);
  70.                 obj = (T)xml.Deserialize (ms);
  71.             }
  72.             catch (Exception ex)
  73.             {
  74.                 MessageBox.Show ("拷贝时出错,出错原因为:" + ex.ToString ());
  75.                 return default (T);
  76.             }
  77.             return obj;
  78.         }
  79.     }
  80. }
复制代码
 
 
 
 
 
例如我们有个简单的类
  1. class Apply
  2.     {
  3.         [CategoryAttribute("基本参数"), DisplayName("片数")]
  4.         public int WaferNum { get; set; } = 25;
  5.         [CategoryAttribute("基本参数"), DisplayName("文件原路径")]
  6.         public string OriFilePath { get; set; } = "D:\\Data";
  7.     }
复制代码
 
需要去导入,保存,深拷贝复制,我们就可以这样调用
  1. Apply apply = new Apply();
  2. XMLSerializer<Apply>.Save(apply , "D:\\Appply.xml");
  3. Apply apply = XMLSerializer<Apply>.Load( "D:\\Appply.xml");
  4. //也可以作为类的复制快捷方式来使用--例如下面类这样
  5. class App
  6.         {
  7.             int a = 0;
  8.             public App Clone()
  9.             {
  10.                 App a;
  11.                 a = XMLSerializer<App>.Clone(this);
  12.                 return a;
  13.             }
  14.         }
复制代码
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
若有兴趣交流分享技术,可关注本人公众号,里面会不定期的分享各种编程教程,和共享源码,诸如研究分享关于c/c++,python,前端,后端,opencv,halcon,opengl,机器学习深度学习之类有关于基础编程,图像处理和机器视觉开发的知识



来源:https://www.cnblogs.com/DOMLX/archive/2023/03/29/17270107.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具