119 votos

¿Cómo serializar un tipo anónimo de C# a una cadena JSON?

Estoy intentando utilizar el código siguiente para serializar un tipo anónimo para JSON:

var serializer = new DataContractJsonSerializer(thing.GetType());
var ms = new MemoryStream();
serializer.WriteObject(ms, thing);
var json = Encoding.Default.GetString(ms.ToArray()); 

Sin embargo, tengo la siguiente excepción cuando este es ejecutado:

Tipo '<>f__AnonymousType1`3[Sistema.Int32,Sistema.Int32,Sistema.Object[]]' no se puede serializar. Considere la posibilidad de marcar con el DataContractAttribute atributo, y marcar todos los de su los miembros que desea serializar con el DataMemberAttribute atributo. Ver el de Microsoft .NET Framework documentación para otros compatibles tipos.

Yo no puedo aplicar atributos a un tipo anónimo (que yo sepa). Hay otra forma de hacer esta serialización o me estoy perdiendo algo?

135voto

Nick Berardi Puntos 31361

Pruebe el JavaScriptSerializer en vez de la DataContractJsonSerializer

JavaScriptSerializer serializer = new JavaScriptSerializer();
var output = serializer.Serialize(your_anon_object);

11voto

mythz Puntos 54874

Puede probar mi ServiceStack JsonSerializer es el más rápido .NET JSON serializador en el momento. Es compatible con serializar DataContract, POCO Cualquier Tipo de Interfaces, enlazadas en los objetos, incluyendo los tipos anónimos, etc.

Ejemplo Básico

var customer = new Customer { Name="Joe Bloggs", Age=31 };
var json = customer.ToJson();
var fromJson = json.FromJson<Customer>(); 

Nota: Sólo use Microsoft JavaScriptSerializer si el rendimiento no sea importante para usted, como yo he tenido que dejar fuera de mis puntos de referencia desde su hasta 40x-100x más lento que los otros JSON serializadores.

8voto

CMS Puntos 315406

Revisar este artículo:

Tip/Trick: Construyendo un método de extensión toJSON utilizando .NET 3.5

7voto

Jason Jackson Puntos 11563

Yo diría que no debería ser serializar un tipo anónimo. Sé que la tentación; desea generar rápidamente algunos de usar y tirar tipos que sólo va a ser utilizado en un sin apretar tipo de ambiente aka Javascript en el navegador. Aún así, me gustaría crear un tipo real y decorarlo como Serializable. A continuación, puedes fuertemente del tipo de los métodos web. Mientras esto no importa ni un ápice de Javascript, se le añade un poco de auto-documentación para el método. Cualquier razonablemente experimentado programador será capaz de mirar a la función de la firma y dice, "Oh, este es el tipo de Foo! Sé lo que debe buscar en JSON."

Habiendo dicho eso, usted puede probar JSON.Net para realizar la serialización. No tengo idea de si funcionará

4voto

aprilchild Puntos 431

Utilizar la biblioteca JSON de Newtonsoft .

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: