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 = "\r\n";
            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要對的上,

這里的直接用 頭部的約束來定義即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM