代码之家  ›  专栏  ›  技术社区  ›  codebreach

XMLSerializer反序列化列表<T>问题

  •  1
  • codebreach  · 技术社区  · 16 年前

    当我运行以下代码序列化facbook用户时,生成的代码如下:

    <?xml version="1.0"?> 
    <ArrayOfUser 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
        xmlns="fbapp">
        <user>
            <user xmlns="http://api.facebook.com/1.0/">
                <about_me />
            </user>
        </user>
    </ArrayOfUser>
    

    但是当我试图通过反序列化来读取它时,用户(使用模式生成的)的根将是 <user> 而不是 <user xmlns="http://api.facebook.com/1.0/"> 标签破坏一切。

    public static List<facebook.Schema.user> ReadFromFile(String filename)
    {
        Stream str = File.OpenRead(filename);
        XmlSerializer formatter = new XmlSerializer(typeof(List<facebook.Schema.user>));
        List<facebook.Schema.user> users = (List<facebook.Schema.user>) formatter.Deserialize(str);
        str.Close();
        return users;
    }
    
    public static void WriteToFile(List<facebook.Schema.user> users, String filename)
    {
        Stream str;
        // ...open...
        XmlSerializer formatter = new XmlSerializer(typeof(List<facebook.Schema.user>));
        formatter.Serialize(str, users);
        str.Close();
    }
    

    编辑: 我要看的课程在这里: Source at Codeplex (查找用户类)

    另外,我觉得问题是序列化增加了一个额外的 <用户> 标记每个列表元素。我试图序列化一个用户对象,甚至它也被封装在 <用户> 标签。所以我得到了如下信息:

    <?xml version="1.0"?>
      <user>
        <user xmlns="http://api.facebook.com/1.0/">
           ...
        </user>
      </user>
    

    而不是

    <?xml version="1.0"?>
      <user xmlns="http://api.facebook.com/1.0/">
           ...
      </user>
    
    0 回复  |  直到 16 年前
    推荐文章