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

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

  • 相关阅读:
    ubuntu安装jdk的两种方法
    LeetCode 606. Construct String from Binary Tree (建立一个二叉树的string)
    LeetCode 617. Merge Two Binary Tree (合并两个二叉树)
    LeetCode 476. Number Complement (数的补数)
    LeetCode 575. Distribute Candies (发糖果)
    LeetCode 461. Hamming Distance (汉明距离)
    LeetCode 405. Convert a Number to Hexadecimal (把一个数转化为16进制)
    LeetCode 594. Longest Harmonious Subsequence (最长的协调子序列)
    LeetCode 371. Sum of Two Integers (两数之和)
    LeetCode 342. Power of Four (4的次方)
  • 原文地址:https://www.cnblogs.com/Jerseyblog/p/7495364.html
Copyright © 2011-2022 走看看