<?xml version="1.0"?>
<HotelGeos>
  <HotelGeoList>
    <HotelGeo Country="中国" ProvinceName="河北" ProvinceId="0500" CityName="南戴河" CityCode="0504">
      <Districts>
        <Location Id="0001" Name="海滨浴场"/>
      </Districts>
      <CommericalLocations>
        <Location Id="050402" Name="海滨地区"/>
      </CommericalLocations>
      <LandLocations>
        <Location Id="0001" Name="南戴河"/>
      </LandLocations>
    </HotelGeo>
    <HotelGeo Country="中国" ProvinceName="河北" ProvinceId="0500" CityName="邢台" CityCode="0505">
      <Districts>
        <Location Id="0001" Name="市中心"/>
      </Districts>
      <CommericalLocations>
        <Location Id="050501" Name="市中心"/>     
      </CommericalLocations>
      <LandLocations>
        <Location Id="0001" Name="人民公园"/>
      </LandLocations>
    </HotelGeo>
  </HotelGeoList>
</HotelGeos>
像这种复杂格式的XML 怎么序列化成  多个 List<t>

解决方案 »

  1.   

    这个复杂吗?我一般习惯于使用XmlSerializerlz可以读下这篇文章:
      

  2.   

    XmlSerializer 对象的Xml序列化和反序列化
    http://www.cnblogs.com/yukaizhao/archive/2011/07/22/xml-serialization.html还有下面 "C#处理Xml的相关随笔" 推荐的一些链接.
      

  3.   

    其实序列化的类我已经写好了。但是对于多级的List<T>好像写的不太对。。
    public static T Deserialize<T>(string xml)
            {
                XmlSerializer xs = new XmlSerializer(typeof(T));
                MemoryStream memoryStream = new MemoryStream(StringToUTF8ByteArray(xml));
                XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
                object result = xs.Deserialize(memoryStream);
                return (T)result;
            }----------------------------------------------
    [Serializable]
        public class HotelGeo
        {
            [XmlAttribute("Country")]
            public string Country { get; set; }
            [XmlAttribute("ProvinceName")]
            public string ProvinceName { get; set; }
            [XmlAttribute("ProvinceId")]
            public string ProvinceId { get; set; }
            [XmlAttribute("CityName")]
            public string CityName { get; set; }
            [XmlAttribute("CityCode")]
            public string CityCode { get; set; }
            [XmlElement("Districts")]
            public Districts Districts { get; set; }
            [XmlElement("CommericalLocations")]
            public Districts CommericalLocations { get; set; }
            [XmlElement("LandLocations")]
            public Districts LandLocations { get; set; }
        }
    ------------------------------
    [Serializable]
        public class LandLocations
        {
            [XmlElement("LandLocations")]
            public List<Location> LocationList { get; set; }
        }
    --------------------------------
    [Serializable]
        public class Location
        {
            [XmlAttribute("Id")]
            public string Id { get; set; }
            [XmlAttribute("Name")]
            public string Name { get; set; }
        }
      

  4.   

    [Serializable]
        public class CommericalLocations
        {
            [XmlElement("CommericalLocations")]
            public List<Location> LocationList { get; set; }
        }
      

  5.   

    [Serializable]
        public class Districts
        {
            [XmlElement("Districts")]
            public List<Location> LocationList { get; set; }
        }
      

  6.   

    简单写了个,测试通过:
    private void Button_Click_1(object sender, RoutedEventArgs e)
            {
                HotelGeos result = Deserialize < HotelGeos>(File.ReadAllText("XMLFile1.xml"));
            }        public static T Deserialize<T>(string xml)
            {
                XmlSerializer xs = new XmlSerializer(typeof(T));
                MemoryStream memoryStream = new MemoryStream(System.Text.UTF8Encoding.UTF8.GetBytes(xml));
                XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
                object result = xs.Deserialize(memoryStream);
                return (T)result;
            }
    实体类     public class HotelGeos
         {
             [XmlArray]
             public List<HotelGeo> HotelGeoList { get; set; }
         }    public class HotelGeo
        {
            [XmlAttribute]
            public string Country { get; set; }        [XmlAttribute]
            public string ProvinceName { get; set; }        [XmlAttribute]
            public string ProvinceId { get; set; }        [XmlAttribute]
            public string CityName { get; set; }        [XmlAttribute]
            public string CityCode { get; set; }        [XmlArray]
            public List<Location> Districts { get; set; }        [XmlArray]
            public List<Location> CommericalLocations { get; set; }        [XmlArray]
            public List<Location> LandLocations { get; set; }
        }    public class Location
        {
            [XmlAttribute]
            public string Id { get; set; }        [XmlAttribute]
            public string Name { get; set; }
        }