2010-06-11 180 views
1

序列化一個類是否可以實現IXmlSerializable並在我的XML文件中捕獲Dictionary>類型的對象?XML使用Dictionary <string,List <string>>對象

我有以下

public class coolio : IXmlSerializable 
{ 
private int a; 
private bool b; 
private string c; 
private Dictionary<string, List<string>> coco; 

public coolio(int _a, bool _b, string _c, Dictionary<string, List<string>> _coco) 
    { 
    a=_a; 
    b=_b; 
    c=_c; 
    coco=_coco; 
    } 

public System.Xml.Schema.XmlSchema GetSchema() 
    { 
    return null; 
    } 

public void WriteXml(XmlWriter writer) 
    { 
    const string myType = "coolio"; 
    writer.WriteStartElement(myType); 
    writer.WriteAttributeString("a", a.ToString()); 
    writer.WriteAttributeString("b", b.ToString()); 
    writer.WriteAttributeString("c", c); 

    // How do I add a subelement for Dictionary<string, List<string>> coco? 

    writer.WriteEndElement(); 
    } 

public void ReadXml(XmlReader reader) 
    { 
    if (reader.MoveToContent() != XmlNodeType.Element || reader.LocalName != "coolio") 
       return; 
    a= int.Parse(reader["a"]); 
    b = bool.Parse(reader["b"]); 
    c= reader["c"]; 

    // How do I read subelement into Dictionary<string, List<string>> coco? 
    } 
} 

但我很爲難,我怎麼可以添加字典>(XML seriliazed到我的XML文件)

回答

1
writer.WriteStartElement("CocoKeys"); 
foreach (var kvp in coco) 
{ 
    writer.WriteStartElement("CocoKey"); 
    writer.WriteAttributeString("key", kvp.Key); 
    writer.WriteStartElement("CoCoValues"); 
    foreach(string s in kvp.Value) 
    { 
    writer.WriteStartElement("CoCoValue"); 
    writer.WriteString(s); 
    writer.WriteEndElement(); 
    } 
    writer.WriteEndElement(); 
    writer.WriteEndElement(); 
    writer.WriteEndElement(); 
} 

這應該產生這樣的:

<CocoKeys> 
    <CocoKey key="sample"> 
    <CocoValues> 
    <CocoValue>Sample1</CocoValue> 
    <CocoValue>Sample2</CocoValue> 
    <CocoValue>Sample3</CocoValue> 
    </CocoKey> 
</CocoKeys> 

另一方面,只是迭代它並重新構造它。我希望代碼是正確的,我只是以你爲例。您可能需要調整方法調用,但在僞代碼中它應該是正確的。

+0

啊,我害怕這一點 - 不得不迭代,我認爲一定有更好的方法,我猜不是 - 謝謝! – Matt 2010-06-12 00:03:58

+0

np,只是練習即時寫作。 – Femaref 2010-06-12 00:04:47

相關問題