Проблемы с сериализацией NameKeyValue и List <> - PullRequest
0 голосов
/ 01 марта 2012

Я постараюсь показать свои проблемы.

У меня есть список пар ключей-значений, которые я хочу сериализовать в файл XML. Я читал другие вопросы ( вопрос - вопрос ) на этом сайте и, наконец, я сделал это:

[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 является объект List <>. Объекты List <> сериализуемы, но не внутри 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.InvalidOperationException» в System.Xml.dll и этот вывод:

<?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

Как я могу делать то, что хочу? Спасибо

...