当前位置: 首页 > news >正文

4.1.1 类的序列化与反序列化(XmlSerializer)

        本文介绍XML序列化和反序列化操作

        本例子中被序列化的类(Devices)中有一个List,其元素类型为:DigitalInputInfo. 序列化以及反序列化都很简单:

        序列化:即把类的对象输出到文件中。

           StreamWriter streamWriter = new StreamWriter(filePath);
            XmlSerializerNamespaces xmlSerializerNamespaces = new XmlSerializerNamespaces();
            xmlSerializerNamespaces.Add("", "");
            XmlSerializer xmlSerializer = new XmlSerializer(sourceObj.GetType());
            xmlSerializer.Serialize(streamWriter, sourceObj, xmlSerializerNamespaces);
            streamWriter.Close();
            return true;

        反序列化:从文件中加载生成类的对象。

         StreamReader streamReader = new StreamReader(filePath);
        XmlSerializer xmlSerializer = new XmlSerializer(type ?? typeof(T));
        obj = xmlSerializer.Deserialize(streamReader);
        streamReader.Close();     

       具体效果以及代码如下:   

一、效果如下

        生成的序列化文件打开后如下:

二、具体代码:

public static bool SaveToXml_FileName<T>(string filePath, T sourceObj)
{if (!string.IsNullOrEmpty(filePath) && sourceObj != null){try{StreamWriter streamWriter = new StreamWriter(filePath);XmlSerializerNamespaces xmlSerializerNamespaces = new XmlSerializerNamespaces();xmlSerializerNamespaces.Add("", "");XmlSerializer xmlSerializer = new XmlSerializer(sourceObj.GetType());xmlSerializer.Serialize(streamWriter, sourceObj, xmlSerializerNamespaces);streamWriter.Close();return true;}catch (Exception ex){Log.Error(ex);}}return false;
}
public static T LoadFromXml_FileName<T>(string filePath, Type type = null)
{object obj = null;try{StreamReader streamReader = new StreamReader(filePath);XmlSerializer xmlSerializer = new XmlSerializer(type ?? typeof(T));obj = xmlSerializer.Deserialize(streamReader);streamReader.Close();}catch (Exception ex){Log.Error(ex);}return (obj == null) ? default(T) : ((T)obj);
}
  public class DigitalInputInfo{private bool isOn = false;public int Id { get; set; } = 0;public string Name { get; set; } = string.Empty;public int IndexByte { get; set; } = 0;public int IndexBit { get; set; } = 0;
}
public class Devices 
{ public List<DigitalInputInfo> digitalInputInfos = new List<DigitalInputInfo>();
}main()
{
Devices    instance = new Devices();
DigitalInputInfo info1 = new DigitalInputInfo()
{Id = 1,IndexByte = 1,IndexBit = 1
};
DigitalInputInfo info2 = new DigitalInputInfo()
{Id = 2,IndexByte = 3,IndexBit = 4
};
instance.digitalInputInfos.Add(info1);
instance.digitalInputInfos.Add(info2);
instance.Save();
}

相关文章:

  • [原创](现代Delphi 12指南):[macOS 64bit App开发]:如何使用NSString类型字符串?
  • Tomcat Web应用(Ubuntu 18.04.6 LTS)部署笔记
  • React-组件通信
  • 【高中数学/古典概率】4红2黑六选二,求取出两次都是红球的概率
  • AI在论文评审中的应用与工具推荐
  • WASM与Kotlin反编译难度对比分析
  • NVIDIA自动驾驶安全与技术读后感
  • 【低配置电脑预训练minimind的实践】
  • 关于 xpath 查找 XML 元素的一点总结
  • go.mod介绍
  • ‌RISC-V低功耗MCU动态时钟门控技术详解
  • CSS基础
  • 第二章、安全认证
  • Nginx 二进制部署与 Docker 部署深度对比
  • 学习海康VisionMaster之顶点检测
  • 03_JavaScript
  • 云网络与SASE架构:构建下一代企业安全网络
  • 悟空统计在SEO优化中的核心作用:外链质量评估
  • 人脸识别考勤系统实现教程:基于Face-Recognition、OpenCV与SQLite
  • Python-基础语法部分的20道题
  • 乌克兰基辅遭大规模袭击,已致12人死亡
  • 生于1984年,马玥已任辽宁锦州北镇市代市长
  • 拍片无小事,牙齿也有故事
  • 与包乐史驾帆航行|航海、钓鱼和写书:一个记者的再就业之路
  • 人民日报首推“大地书单”,10本好书上榜!
  • A股三大股指涨跌互现:人形机器人产业链爆发,两市成交超1.2万亿元