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

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();
}

http://www.xdnf.cn/news/1596.html

相关文章:

  • 一文走进GpuGeek | 模型调用
  • Python 面向对象练习
  • 探秘 FFmpeg 版本发展时间简史
  • SpringMVC处理请求映射路径和接收参数
  • 配置RSUniVLM环境(自用)
  • [特殊字符] 分布式定时任务调度实战:XXL-JOB工作原理与路由策略详解
  • IDEA启动报错Failed to create JVM. JVM path的解决办法
  • (51单片机)LCD展示动画(延时函数)(LLCD1602教程)
  • 2025最新系统 Linux 教程(六)
  • Puter部署指南:基于Docker的多功能个人云平台掌控自己的数据
  • uniapp-商城-34-shop 购物车 选好了 进行订单确认
  • java—12 kafka
  • Kubernetes(K8S)入门阶段详细指南
  • 微信小程序根据图片生成背景颜色有效果图
  • 并发设计模式实战系列(6):读写锁
  • 【UVM项目实战】异步fifo—uvm项目结构以及uvm环境搭建
  • 开源交易所源码,交易所开发
  • 11.原型模式:思考与解读
  • 使用eclipse将原有tomcat插件工程调整为的Dynamic Web Module工程(保姆级教程)
  • 【数据可视化-26】基于人口统计与社会经济数据的多维度可视化分析
  • 【LLM+Code】Windsurf Agent 模式PromptTools详细解读
  • JAVA---面向对象(上)
  • 5.3.1 MvvmLight以及CommunityToolkit.Mvvm介绍
  • Redis安装及入门应用
  • 第53.5讲 | 小项目实战:用 SHAP 值解释农作物产量预测模型 [特殊字符][特殊字符]
  • SpringBoot整合AOP
  • Tomcat:从零理解Java Web应用的“心脏”
  • 健康养生小窍门
  • 微高压氧舱VS高压氧舱:氧气疗法的“双生花”如何重塑健康?
  • 【前端】基于 Promise 的 HTTP 客户端工具Axios 详解