.net - enviar parámetros tipo lista por ajax a un controller en mvc 5
Serialización de una lista de pares clave/valor a XML (1)
KeyValuePair no es serializable, porque tiene propiedades de solo lectura. Here hay más información (gracias a Thomas Levesque). Para cambiar el nombre generado use el atributo [XmlType]
.
Defina su propio como este:
[Serializable]
[XmlType(TypeName="WhateverNameYouLike")]
public struct KeyValuePair<K, V>
{
public K Key
{ get; set; }
public V Value
{ get; set; }
}
Tengo una lista de pares clave / valor que me gustaría almacenar y recuperar de un archivo XML. Así que esta tarea es similar a la descrita here . Estoy tratando de seguir los consejos en la respuesta marcada (usando un KeyValuePair y un XmlSerializer ) pero no lo hago funcionar.
Lo que tengo hasta ahora es una clase de "Configuración" ...
public class Settings
{
public int simpleValue;
public List<KeyValuePair<string, int>> list;
}
... una instancia de esta clase ...
Settings aSettings = new Settings();
aSettings.simpleValue = 2;
aSettings.list = new List<KeyValuePair<string, int>>();
aSettings.list.Add(new KeyValuePair<string, int>("m1", 1));
aSettings.list.Add(new KeyValuePair<string, int>("m2", 2));
... y el siguiente código para escribir esa instancia en un archivo XML:
XmlSerializer serializer = new XmlSerializer(typeof(Settings));
TextWriter writer = new StreamWriter("c://testfile.xml");
serializer.Serialize(writer, aSettings);
writer.Close();
El archivo resultante es:
<?xml version="1.0" encoding="utf-8"?>
<Settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<simpleValue>2</simpleValue>
<list>
<KeyValuePairOfStringInt32 />
<KeyValuePairOfStringInt32 />
</list>
</Settings>
Por lo tanto, ni la clave ni el valor de los pares en mi lista se almacenan aunque el número de elementos sea correcto. Obviamente estoy haciendo algo básicamente mal. Mis preguntas son:
- ¿Cómo puedo almacenar los pares clave / valor de la lista en el archivo?
- ¿Cómo puedo cambiar el nombre generado predeterminado "KeyValuePairOfStringInt32" de los elementos de la lista por otro nombre como "listElement" que me gustaría tener?