Использование DataContractSerializer для десериализации Xml с несколькими коллекциями

Я использую DataContractSerializer для десериализации Xml, который имеет несколько коллекций. XML выглядит следующим образом

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<collectionContents>
    <collection>
        <name>Folder1</name>
        <id>33399446</id>
        <contents>TestFolder1</contents>
    </collection>
    <collection>
      <name>Folder2</name>
      <id>566494</id>
      <contents>TestFolder2</contents>
    </collection>
    <file>
        <name>2012-08-24_171456.jpg</name>
        <id>33399624</id>
        <size>47612</size>
        <lastModified>2012-12-18T18:54:50.000-08:00</lastModified>
    </file>
    <file>
        <name>1033.ico</name>
        <id>33412726</id>
        <size>23246</size>
        <lastModified>2012-12-18T20:37:15.000-08:00</lastModified>
    </file>
</collectionContents>

И я создал DataContractSerializer для десериализации xml.

[DataContract(Namespace = "")]
class Item
{
    [DataMember(Name = "name")]
    public string name;
    [DataMember(Name = "id")]
    public string id;
}

[DataContract(Name = "collection", Namespace = "")]
class Folder : Item
{
    [DataMember(Name = "contents")]
    public string contents;
}

[DataContract(Name = "file", Namespace = "")]
class File : Item
{
    [DataMember(Name = "size")]
    public long size;
    [DataMember(Name = "lastModified", Order = 3)]
    public string lastModified;
}

[CollectionDataContract(Name = "collectionContents", Namespace = "")]
class Folders : List<Folder>
{}

[CollectionDataContract(Name = "collectionContents", Namespace = "")]
class Files : List<File>
{}

Я могу использовать два DataContractSerializer, чтобы получить две папки и файлы коллекций.

DataContractSerializer folderSer = new DataContractSerializer(typeof(Folderes));
DataContractSerializer fileSer = new DataContractSerializer(typeof(Files));

Но его нужно дважды десериализовать, кто-нибудь знает, есть ли способ получить две коллекции, используя только один DataContractSerializer?

Я устал ниже, но он вернул количество папок/файлов равное 0.

[DataContract(Name = "collectionContents", Namespace = "")]
class ItemCollectionList
{
    [DataMember(Name = "collection")]
    public Folders folders;     // Return count is 0;
    [DataMember(Name = "file")]
    public Files files;         // Return count is 0;
}

person trent.xu    schedule 21.12.2012    source источник
comment
Вам не нужно ставить подпись в своем посте - ваша карточка пользователя добавляется автоматически. Прочтите часто задаваемые вопросы для получения дополнительной информации.   -  person Artemix    schedule 21.12.2012


Ответы (1)


Можете ли вы обернуть элементы collection и file в свой XML с элементами folders и files? (чтобы он лучше соответствовал вашему ItemCollectionList типу)

person MarkG    schedule 21.12.2012