2012-02-28 2 views
3

Я пытаюсь десериализовать XML, однако у меня возникает много проблем с объектом List, который я использую.Проблемы с XML-списком <T> десериализация в C#

XML, заключается в следующем:

<EntriesSerialize> 
    <Entries> 
     <Entry file="myFile" 
     value="2000" /> 
     <Entry file="myFile" 
     value="400" /> 
     <Entry file="myFile" 
     value="200" /> 
    </Entries> 
</EntriesSerialize> 

Мои классы являются:

[XmlType("Entry")] 
public class Entry 
{ 
    public Entry() 
    { 

    } 

    [XmlAttribute("file")] 
    public string File { get; set; } 

    [XmlAttribute("value")] 
    public string Value { get; set; } 

} 

[XmlType("EntriesSerialize")] 
public class EntriesSerialize 
{ 
    public EntriesSerialize() 
    { 
     EntriesList = new List<Entry>(); 
    } 

    [XmlElement("Entries")] 
    public List<Entry> EntriesList { get; set; } 

} 

код, который я использую для десериализации этот XML является:

public static T Deserialize<T>(string content) 
{ 
    byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(content); 
    MemoryStream stream = new MemoryStream(byteArray); 
    StreamReader reader = new StreamReader(stream); 

    XmlSerializer serializer; 
    serializer = new XmlSerializer(typeof(T)); 

    T model = (T)serializer.Deserialize(reader); 
    reader.Close(); 

    return model; 
} 

Метод, который В десериализации я называю Deserialize (строковое содержимое) следующим образом:

EntriesSerialize temp = Deserialize<EntriesSerialize>(data); 

Однако, когда я смотрю на переменную temp с помощью отладчика C#, я вижу, что есть только один элемент внутри объекта ItemsList и что этот элемент имеет свои атрибуты файла и значения как null.

Примечание: сериализация этих классов работает должным образом.

ответ

3

атрибут (ы) на EntriesList должно быть:

[XmlArray("Entries"), XmlArrayItem("Entry")] 
public List<Entry> EntriesList { get; set; } 

Ваш текущий синтаксис с [XmlElement("Entries")] сконфигурирован для:

<EntriesSerialize> 
    <Entries file="myFile" value="2000" /> 
    <Entries file="myFile" value="400" /> 
    <Entries file="myFile" value="200" /> 
</EntriesSerialize> 

(для информации, ни один из [XmlType("...")] атрибутов используются в этом сценарий, но они также не наносят никакого вреда)

Смежные вопросы