序列化NameKeyValue和List<>的问题

时间:2012-03-01 19:55:48

标签: c# list serialization xml-serialization

我会试着表明我的问题。

我有一个关键字值列表,我希望将其序列化为XML文件。我在这个网站上读过其他问题(question - question),最后我做了这个:

[Serializable]
[XmlType(TypeName = "Pair")]
public class NameValuePair
{
    public String Key { get; set; }
    public Object Value { get; set; }

    public NameValuePair()
    {
        Key = null;
        Value = null;
    }

    public NameValuePair(String k, Object v)
    {
        Key = k;
        Value = v;
    }
}

[Serializable]
[XmlType(TypeName = "FileTransfer_Configuration_File")]
public class ConfigTable : List<NameValuePair>
{
    //more code 
}

//Serialization example
XmlSerializer serializer = new XmlSerializer(typeof(ConfigTable));
using (StreamWriter writer = new StreamWriter(file))
{
     serializer.Serialize(writer, configtable);
}

结果完全没问题:

<?xml version="1.0" encoding="utf-8"?>
<FileTransfer_Configuration_File xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Pair>
    <Key>ini_Win</Key>
    <Value xsi:type="xsd:boolean">true</Value>
</Pair>
<Pair>
    <Key>son_Peticion</Key>
    <Value xsi:type="xsd:string">defecto</Value>
</Pair>
</FileTransfer_Configuration_File>

当NameValuePair的value属性是List&lt;&gt;时,会出现问题。宾语。列表与LT;&GT;对象是可序列化的,但不在NameValuePair中:

List<Usuario> aux = new List<Usuario>();
aux.Add(new Usuario("pepito"));
aux.Add(new Usuario("juanito"));
aux.Add(new Usuario("miguelito", true, "c:/miguelito/"));
NameValuePair nvp = new NameValuePair("clave", aux);

XmlSerializer serializer = new XmlSerializer(typeof(NameValuePair));
using (StreamWriter writer = new StreamWriter(file))
{
     serializer.Serialize(writer, nvp);
}

结果:System.Xml.dll中的'System.InvalidOperationException'和此输出:

<?xml version="1.0" encoding="utf-8"?>
<Pair xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <Key>clave</Key>
    //abrupt tnd of file

我怎样才能做我想做的事?谢谢

0 个答案:

没有答案