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要对的上,

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

  • 相关阅读:
    kali渗透综合靶机(八)--Billu_b0x靶机
    kali渗透综合靶机(七)--Super-Mario-Host靶机
    kali渗透综合靶机(九)--Typhoon靶机
    【Flask】 python学习第一章
    【HICP Gaussdb】数据库 数据库管理(连接方式 会话模式 存储表空间)-6
    【HICP Gaussdb】数据库 数据库管理(shutdown 日志 连接命令)-5
    【HCIA Gaussdb】学习汇总-数据库管理(数据库基本概念)-3
    【Flask】 python学习第一章
    【HCIA Gaussdb】学习汇总-数据库管理-2
    【HICP Gaussdb】数据库 数据库管理(调优 启动流程)-4
  • 原文地址:https://www.cnblogs.com/Jerseyblog/p/7495364.html
Copyright © 2011-2022 走看看