C# Xml序列化与反序列化

首次发布:2018-11-21 15:05
        using System.IO;
        using System.Xml.Serialization;
        private void TestXmlSerialize()
        {
            //原创来自 http://www.luofenming.com/show.aspx?id=ART2018112100001转载请保留此地址
            string ConfigPath = AppDomain.CurrentDomain.BaseDirectory + "JH.xml";
            string xmlData = string.Empty;
            using (StreamReader sr = new StreamReader(ConfigPath))
            {
                xmlData = sr.ReadToEnd();//读取xml文件
            }
            Config config;
            XmlSerializer xs = new XmlSerializer(typeof(Config));//序列化成实体Config
            using (Stream stream = new MemoryStream(Encoding.UTF8.GetBytes(xmlData)))
            {
                config = (Config)xs.Deserialize(stream);//反序列化成实体Config
            }
        }

        #region 实体
        [Serializable]
        [XmlRoot(ElementName = "Config")]
        public class Config
        {
            [XmlArray("Company")]
            public List<CompanyItem> Company { get; set; }

            [XmlArray("Property")]
            public List<PropertyItem> Property { get; set; }

            [XmlArray("Product")]
            public List<ProductItem> Product { get; set; }

            [XmlArray("Unit")]
            public List<UnitItem> Unit { get; set; }
        }

        [Serializable]
        [XmlType(TypeName = "companyItem")]
        public class CompanyItem
        {
            [XmlAttribute(AttributeName = "name")]
            public string name { get; set; }

            [XmlText]
            public string innerText { get; set; }
        }

        [Serializable]
        [XmlType(TypeName = "propertyItem")]
        public class PropertyItem
        {
            [XmlAttribute(AttributeName = "name")]
            public string name { get; set; }

            [XmlText]
            public string innerText { get; set; }
        }

        [Serializable]
        [XmlType(TypeName = "productItem")]
        public class ProductItem
        {
            [XmlAttribute(AttributeName = "name")]
            public string name { get; set; }

            [XmlText]
            public string innerText { get; set; }
        }

        [Serializable]
        [XmlType(TypeName = "unitItem")]
        public class UnitItem
        {
            [XmlAttribute(AttributeName = "name")]
            public string name { get; set; }

            [XmlText]
            public string innerText { get; set; }
        } 
        #endregion

以下是JH.xml文件里面内容
<Config>
<Company>
  <companyItem name="国网公司总部">01</companyItem>
  <companyItem name="国网华北分部">02</companyItem>
  <companyItem name="国网华东分部">03</companyItem>
  <companyItem name="国网华中分部">04</companyItem>
  <companyItem name="国网东北分部">05</companyItem>
  <companyItem name="国网西北分部">06</companyItem>
  <companyItem name="国网北京电力">11</companyItem>
  <companyItem name="国网天津电力">12</companyItem>
  <companyItem name="国网河北电力">13</companyItem>
  <companyItem name="国网山西电力">14</companyItem>
  <companyItem name="国网蒙东电力">15</companyItem>
  <companyItem name="国网冀北电力">16</companyItem>
  <companyItem name="国网辽宁电力">21</companyItem>
  <companyItem name="国网吉林电力">22</companyItem>
  <companyItem name="国网黑龙江电力">23</companyItem>
  <companyItem name="国网上海电力">31</companyItem>
  <companyItem name="国网江苏电力">32</companyItem>
  <companyItem name="国网浙江电力">33</companyItem>
  <companyItem name="国网安徽电力">34</companyItem>
  <companyItem name="国网福建电力">35</companyItem>
  <companyItem name="国网江西电力">36</companyItem>
  <companyItem name="国网山东电力">37</companyItem>
  <companyItem name="国网河南电力">41</companyItem>
  <companyItem name="国网湖北电力">42</companyItem>
  <companyItem name="国网湖南电力">43</companyItem>
  <companyItem name="国网重庆电力">50</companyItem>
  <companyItem name="国网西藏电力">54</companyItem>
  <companyItem name="国网陕西电力">61</companyItem>
  <companyItem name="国网甘肃电力">62</companyItem>
  <companyItem name="国网青海电力">63</companyItem>
  <companyItem name="国网宁夏电力">64</companyItem>
  <companyItem name="国网新疆电力">65</companyItem>
  <companyItem name="国网计量中心">70</companyItem>
  <companyItem name="中国电科院">71</companyItem>
  <companyItem name="南瑞集团">72</companyItem>
  <companyItem name="国网运行公司">73</companyItem>
  <companyItem name="国网直流公司">74</companyItem>
  <companyItem name="国网交流公司">75</companyItem>
</Company>
<Property>
  <propertyItem name="电能表">01</propertyItem>
  <propertyItem name="互感器">02</propertyItem>
  <propertyItem name="计量箱(屏、柜)">05</propertyItem>
  <propertyItem name="电能信息采集终端">09</propertyItem>
  <propertyItem name="计量标准">10</propertyItem>
  <propertyItem name="测试装置">13</propertyItem>
  <propertyItem name="其他仪器仪表">14</propertyItem>
  <propertyItem name="周转箱(托盘)">19</propertyItem>
  <propertyItem name="现场手持终端">20</propertyItem>
  <propertyItem name="反窃电装置">51</propertyItem>
  <propertyItem name="流水线设备">52</propertyItem>
  <propertyItem name="仓储设备">53</propertyItem>
  <propertyItem name="通信模块">54</propertyItem>
</Property>
  <Product>
    <productItem name="单相计量故障识别模块">02</productItem>
    <productItem name="三相计量故障识别模块">03</productItem>
    <productItem name="采集故障识别模块">04</productItem>
    <productItem name="超高频RFID模块">05</productItem>
  </Product>
  <Unit>
    <unitItem name="客户">0</unitItem>
    <unitItem name="公司总部">1</unitItem>
    <unitItem name="公司分部">2</unitItem>
    <unitItem name="省级电力公司">3</unitItem>
    <unitItem name="直属单位">4</unitItem>
  </Unit>
</Config>