2012-02-28 57 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; 
} 

的方法我在反序列化中調用的是反序列化(字符串內容),如下所示:

EntriesSerialize temp = Deserialize<EntriesSerialize>(data); 

但是,當我使用C#調試器查看temp變量時,發現EntriesList對象中只有一個元素,並且此元素的文件和值屬性爲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("...")]屬性都在此使用情景,但他們也沒有任何傷害)