zoukankan      html  css  js  c++  java
  • c#中对XML反序列化

    生成对象类

    可以手动生成。
    也可以使用windows系统自带的xsd.exe工具。

    根据不同的windows版本,该工具可能在:

    C:Program Files (x86)Microsoft SDKsWindowsv7.0AinNETFX 4.7.2 Tools
    C:Program Files (x86)Microsoft SDKsWindowsv8.1AinNETFX 4.7.2 Tools
    C:Program Files (x86)Microsoft SDKsWindowsv10.0AinNETFX 4.7.2 Tools
    

    通过

    xsd sample.xml
    

    生成schema文件sample.xsd

    然后通过

    xsd sample.xsd /c
    

    生成c文件。根据根节点名称会生成对应的class文件代表对应的对象类。

    名称修改

    如果反序列化时,需要使用不同的属性名来存储,比如xml中使用中文,而json想改为使用英文字段,可以通过XmlElementXmlRootAttribute元素对类进行装饰。

    如根节点:

    [System.Xml.Serialization.XmlRootAttribute(Namespace = "", ElementName = "检测信息", IsNullable = false)]
    public partial class SampleClass {}
    

    此时,会将根节点检测信息,读入SampleClass节点

    对于子节点:

    [XmlElement(ElementName = "公司名称")]
    public string CompanyName
    {
        get;
        set;
    }
    

    可以将公司名称节点读入CompanyName节点。

    数据格式化

    对于特定类别的数据格式(如时间日期),想对节点数据格式化解析,可以增加私有属性,并且修改公共属性的set方式,解析格式化后再存入私有属性。

    如对于XML中yyyy年MM月dd日HH时mm分ss秒格式的日期,想输出为yyyy-MM-dd HH:mm:ss格式:

            public static string TestDateFormatIn = "yyyy年MM月dd日HH时mm分ss秒";
            public static string TestDateFormatOut = "yyyy-MM-dd HH:mm:ss";
            
            //公共属性,反序列化时使用该属性
            public string DATE
            {
                get
                {
                    return this.TestDateFormatted;
                }
                set
                {
                    System.DateTime parsedDate;
                    if (System.DateTime.TryParseExact(value, ArteryXmlDataHelper.TestDateFormatIn, null,
                                       System.Globalization.DateTimeStyles.None, out parsedDate))
                    {
                        this.TestDateFormatted = parsedDate.ToString(ArteryXmlDataHelper.TestDateFormatOut);
                    }
                    else
                    {
                        this.TestDateFormatted = value;
                    }
                }
            }
            //私有属性,添加[XmlIgnore]使xml反序列化时忽略该属性
            [XmlIgnore]
            public string TestDateFormatted { get; set; }
    

    反序列化

    假设生成的序列化类为SampleClass,则反序列化代码为:

    XmlSerializer serializer = new XmlSerializer(typeof(ArteryXmlData));
    SampleClass xmlData = null;
    using (var stream = new FileStream(sample.xml, FileMode.Open))
    {
      xmlData = (SampleClass)serializer.Deserialize(stream);
    }
    
  • 相关阅读:
    selector 使用说明
    volley用法之 以post方式发送 json 参数
    linux系统下使用流行的版本管理工具 Git
    Android BLE 蓝牙编程(四)
    Android BLE 蓝牙编程(三)
    Android BLE 蓝牙编程(二)
    Android BLE 蓝牙编程(一)
    php比较两个字符串是否相同
    下拉刷新
    理财小工具(二)贷款计算器
  • 原文地址:https://www.cnblogs.com/mosakashaka/p/12608867.html
Copyright © 2011-2022 走看看