Список десериализации XMLSerializer <T>выпуск - PullRequest
1 голос
/ 07 августа 2009

Когда я запускаю следующий код для сериализации пользователей 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();
}

EDIT: Класс, который я пытаюсь просмотреть, находится здесь: Источник в Codeplex (ищите класс пользователя)

Кроме того, проблема, которую я чувствую, заключается в том, что сериализация добавляет дополнительный тег <user> для каждого элемента списка. Я пытался сериализовать один пользовательский объект, и даже он был заключен в тег <user>. Так я получаю что-то вроде:

<?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>
...