2012-02-28 6 views
3

XMLをデシリアライズしようとしていますが、私が使用しているリストオブジェクトには多くの問題があります。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); 

しかし、C#デバッガを使用してtemp変数を見ると、EntriesListオブジェクト内に1つの要素しかなく、この要素のfile属性とvalue属性がnullであることがわかります。

注:これらのクラスのシリアル化は、期待通りに機能します。 EntriesList

答えて

3

属性(複数可)でなければなりません:

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

[XmlElement("Entries")]とあなたの現在の構文がために設定されています(詳細については、どちらの[XmlType("...")]属性の

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

は、この中で使用されていますシナリオですが、どちらも害はありません)

関連する問題