Quiero convertir mi Dictionary<int,List<int>>
cadena a JSON. ¿Alguien sabe cómo lograr esto en C #?
c#
json
dictionary
daehaai
fuente
fuente
Respuestas:
Serializar estructuras de datos que contienen solo valores numéricos o booleanos es bastante sencillo. Si no tiene mucho para serializar, puede escribir un método para su tipo específico.
Para
Dictionary<int, List<int>>
lo que ha especificado, puede usar Linq:Pero, si está serializando varias clases diferentes, o estructuras de datos más complejas, o especialmente si sus datos contienen valores de cadena , sería mejor usar una biblioteca JSON confiable que ya sepa cómo manejar cosas como caracteres de escape y saltos de línea. Json.NET es una opción popular.
fuente
Esta respuesta menciona Json.NET pero no le dice cómo puede usar Json.NET para serializar un diccionario:
A diferencia de JavaScriptSerializer,
myDictionary
no tiene que ser un diccionario de tipo<string, string>
para que JsonConvert funcione.fuente
Json.NET probablemente serializa los diccionarios de C # de manera adecuada ahora, pero cuando el OP originalmente publicó esta pregunta, muchos desarrolladores de MVC pueden haber estado utilizando la clase JavaScriptSerializer porque esa era la opción predeterminada lista para usar .
Si está trabajando en un proyecto heredado (MVC 1 o MVC 2) y no puede usar Json.NET, le recomiendo que use un en
List<KeyValuePair<K,V>>
lugar de unDictionary<K,V>>
. La clase JavaScriptSerializer heredada serializará este tipo muy bien, pero tendrá problemas con un diccionario.Documentación: serialización de colecciones con Json.NET
fuente
Esto escribirá en la consola:
fuente
Respuesta simple de una línea
(
using System.Web.Script.Serialization
)Este código será convertir cualquier
Dictionary<Key,Value>
aDictionary<string,string>
y luego serializarlo como una cadena JSON:Vale la pena señalar que algo así
Dictionary<int, MyClass>
también se puede serializar de esta manera mientras se preserva el tipo / objeto complejo.Explicación (desglose)
Puede reemplazar la variable
yourDictionary
con su variable real.Hacemos esto, porque tanto la clave como el valor deben ser de tipo cadena, como requisito para la serialización de a
Dictionary
.fuente
System.Web.Extensions
no está en la versión de Client Framework, pero también requiere la versión completa.Lo siento si la sintaxis es mínima, pero el código del que obtengo esto estaba originalmente en VB :)
fuente
En Asp.net Core use:
fuente
System.Core
y luego intenté hacer referenciausing Newtonsoft.Json
y sin alegría. Creo queNewtonsoft
es una biblioteca de terceros.Puedes usar
System.Web.Script.Serialization.JavaScriptSerializer
:fuente
Aquí le mostramos cómo hacerlo utilizando solo bibliotecas .Net estándar de Microsoft ...
fuente
Dictionary<string, dynamic>
y tener todos los tipos primitivos JSON como números enteros, flotantes, booleanos, cadenas, incluso nulos y dentro de un objeto. +1Puedes usar JavaScriptSerializer .
fuente
string
. He publicado una respuesta aquí que incluye eso, si quieres echar un vistazo.Parece que hay muchas bibliotecas diferentes y lo que no parece haber ido y venido en los años anteriores. Sin embargo, a partir de abril de 2016, esta solución funcionó bien para mí. Cadenas fácilmente reemplazables por ints .
TL / DR; Copie esto si es por eso que vino aquí:
Dos puntos de importación. Primero, asegúrese de agregar System.Runtime.Serliazation como referencia en su proyecto dentro del Explorador de soluciones de Visual Studio. Segundo, agrega esta línea,
en la parte superior del archivo con el resto de sus usos, para que
DataContractJsonSerializer
pueda encontrar la clase. Esta publicación de blog tiene más información sobre este método de serialización.Formato de datos (entrada / salida)
Mis datos son un diccionario con 3 cadenas, cada una apuntando a una lista de cadenas. Las listas de cadenas tienen longitudes 3, 4 y 1. Los datos se ven así:
La salida escrita en el archivo estará en una línea, aquí está la salida formateada:
fuente
Esto es similar a lo que Meritt ha publicado anteriormente. simplemente publicando el código completo
fuente
Si su contexto lo permite (restricciones técnicas, etc.), use el
JsonConvert.SerializeObject
método de Newtonsoft.Json : le facilitará la vida.fuente