zoukankan      html  css  js  c++  java
  • c# xml序列化和反序列化。也就是xml的解析和反解析。

    用习惯了newTownSoft.json 的json反序列化。碰到xml是真的不习惯。

    每次json反序列化都是直接把json丢到bejson网站生成一个实体类,稍微修改修改一点点变量名。然后直接newTownSoft反序列化,一下就得到一个实体类了。今天调某个接口,碰到xml。

    记录如下。

    xml

    <response>
    <functionID>setItemsPics</functionID>
    <time>2017-09-07 15:51:04</time>
    <ItemsIDList>
      <itemIDInfo>
        <operCode>0</operCode>
        <operation>操作成功</operation>
      </itemIDInfo>
    <itemIDInfo>
      <itemID>1125507057</itemID>
        <operCode>0</operCode>
        <operation>操作成功</operation>
      </itemIDInfo>
    </ItemsIDList>
    </response>

    实体类如下:先引用 using System.Xml.Serialization;

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Xml.Serialization;
    namespace DDTopManager.Response
    {
        [XmlRoot("response")]
        public class RSPItemPicSet
        {
     
            //操作返回xml示例,按这个xml格式定义可序列化的实体类
            //        public string str = @"<response>
            //    <functionID>setItemsPics</functionID>
            //    <time>2017-09-07 15:51:04</time>
            //    <ItemsIDList>
            //        <itemIDInfo>
            //            <itemID>1125550957</itemID>
            //            <operCode>0</operCode>
            //            <operation>操作成功</operation>
            //        </itemIDInfo>
            //        <itemIDInfo>
            //            <itemID>1125507057</itemID>
            //            <operCode>0</operCode>
            //            <operation>操作成功</operation>
            //        </itemIDInfo>
            //    </ItemsIDList>
            //</response>";
            [XmlElement("functionID")]
            public string functionID { get; set; }
            [XmlElement("time")]
            public string time { get; set; }
     
            [XmlArray("ItemsIDList"), XmlArrayItem("itemIDInfo")]
            public List<itemIDInfo> ItemsIDList { get; set; }
            [XmlRoot("itemIDInfo")]
            public class itemIDInfo
            {
                [XmlElement("itemID")]
                public string itemID { get; set; }
                [XmlElement("operCode")]
                public string operCode { get; set; }
                [XmlElement("operation")]
                public string operation { get; set; }
            }
        }
    }

    引用(这是从str这个xml中反序列化到实体类)大致如下:

    XmlSerializer se = new XmlSerializer(typeof(RSPOrdersListGet));
     
    byte[] arry = Encoding.UTF8.GetBytes(str);
    System.IO.Stream me = new System.IO.MemoryStream(arry);
    RSPOrdersListGet rsp = (RSPOrdersListGet)se.Deserialize(me);

    序列化如下:

    RSPOrdersListGet RSPLG = new RSPOrdersListGet();
               RSPLG.functionID = "setItemsPics";
     
               List<itemIDInfo> itemidinfos = new List<itemIDInfo>();
               itemIDInfo idi = new itemIDInfo();
               idi.operation = "000";
               idi.operCode = "0011";
               idi.itemId = "aaa";
               itemidinfos.Add(idi);
               itemIDInfo idi1 = new itemIDInfo();
               idi1.operation = "000";
               idi1.operCode = "0011";
               idi1.itemId = "bbb";
               itemidinfos.Add(idi1);
               RSPLG.ItemsIDList = itemidinfos;
               XmlSerializer rSPOrdersListGet = new XmlSerializer(typeof(RSPOrdersListGet));
               rSPOrdersListGet.Serialize(Console.Out, RSPLG);

    序列化的时候改命名空间编码等

    XmlWriterSettings settings = new XmlWriterSettings();
    settings.Indent = true;
    settings.IndentChars = "    ";
    settings.NewLineChars = "
    ";
    settings.Encoding = Encoding.GetEncoding("gbk");
    using (XmlWriter xmlWriter = XmlWriter.Create(sm, settings))
    {
        // 强制指定命名空间,覆盖默认的命名空间 
        XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
        namespaces.Add(string.Empty, string.Empty);
        rSPOrdersListGet.Serialize(xmlWriter, RSTGS, namespaces);
        xmlWriter.Close();
    };

    记录,以免忘记。

    有一点和newTownSoft.json序列化和反序列化不同的是,比如数字List<Entity> MyData 这个MyData 和json要对的上,

    这里的直接用 头部的约束来定义即可

  • 相关阅读:
    Flutter-现有iOS工程引入Flutter
    EventBus 3.0使用详解
    一步一步教你实现iOS音频频谱动画(二)
    一步一步教你实现iOS音频频谱动画(一)
    iOS热更新实现方式
    github 远程仓库名或地址修改,本地如何同步
    Xmind ZEN破解版来袭:如何去除水印
    flutter packages get 慢 解决方案
    web计时机制——performance对象
    jQuery设计思想
  • 原文地址:https://www.cnblogs.com/Violety/p/9360842.html
Copyright © 2011-2022 走看看