2010-06-11 117 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

相关问题