<?xml version="1.0" encoding="utf-8" ?>
<google>
  <googleC>
    <googleColorBorder>f6fbff</googleColorBorder>
    <googleColorBG>f6fbff</googleColorBG>
  </googleC>
  <googleC>
    <googleColorBorder>aaaa</googleColorBorder>
    <googleColorBG>bb</googleColorBG>
  </googleC>
  <googleC>
    <googleColorBorder>ttt</googleColorBorder>
    <googleColorBG>gg</googleColorBG>
  </googleC>
</google>
实体类:googleC   属性:googleColorBorder、googleColorBG请问如何反序列化成 List<googleC>不要用XmlDocument 效率太差最好用 XmlReader 

解决方案 »

  1.   

    可以用 XmlSerializer  Deserialize()方法
      

  2.   

    http://hi.baidu.com/jackeyrain/blog/item/98cdfea861d957b8cb130cda.html
    http://www.cnblogs.com/cocos/archive/2009/08/03/1537664.html 
      

  3.   


    List<GoogleC> list = new List<GoogleC>();using (XmlReader reader = XmlReader.Create(...))
    {
        while (reader.Read())
        {
            string border = null, backgroud = null;
            if (reader.NodeType == XmlNodeType.Element)
            {
                if (reader.Name == "googleColorBorder") border = reader.ReadElementContentAsString();
                if (reader.Name == "googleColorBG") backgroud = reader.ReadElementContentAsString();
            }
            else if (reader.NodeType == XmlNodeType.EndElement && reader.Name == "googleC")
            {
                list.Add(new GoogleC(border, backgroud));
            }
        }
    }
      

  4.   

    更正:List<GoogleC> list = new List<GoogleC>();using (XmlReader reader = XmlReader.Create(...))
    {
        string border = null, backgroud = null;       //<---
        while (reader.Read())
        {
             if (reader.NodeType == XmlNodeType.Element)
            {
                if (reader.Name == "googleColorBorder") border = reader.ReadElementContentAsString();
                if (reader.Name == "googleColorBG") backgroud = reader.ReadElementContentAsString();
            }
            else if (reader.NodeType == XmlNodeType.EndElement && reader.Name == "googleC")
            {
                list.Add(new GoogleC(border, backgroud));
                border = background = null;
            }
        }
    }
      

  5.   

    5楼的方法估计能搞定吧。其实也可以使用DataSet.ReadXML来处理。
      

  6.   

    color这种类型不能直接序列化
    写个整型的存储color,在写个color属性来读写这个就能序列化了。
      

  7.   

    XmlRootAttribute root = new XmlRootAttribute();
                root.ElementName = "google";
                root.Namespace = "google";
    XmlSerializer xmlSerializer = new XmlSerializer(typeof (List<googleC>), root);
    XmlReader xmlReader = XmlReader.Create(@"d:\test4.xml");//文件路径
                object obj = xmlSerializer.Deserialize(xmlReader);
                xmlReader.Close(); 
      

  8.   

    把root.Namespace = "google";这个去掉