2008-12-24 7 views
18

Necesito serializar/deserializar algunos objetos en/desde cadena y transferirlos como datos opacos. Puedo usar XmlSerializer para hacerlo, pero la cadena generada parece torpe y larga. Entonces, ¿hay algún serializador conciso disponible en .NET?¿Hay alguna clase de ayudante de serialización Json fuera de la plataforma en .NET BCL?

Lo primero que me viene a la mente es que quizás .NET debería tener el serializador JSON, pero no puedo encontrarlo. ¿Hay algún enfoque estándar en .NET para convertir objetos a/desde cadenas concisas?

Respuesta

26

Hay dos;

En la forma tradicional, no son 100% compatibles entre-sí, especialmente re DateTime; DCJS usa (IIRC) una cadena literal; JSS usa new, y ninguno de los dos puede leerse correctamente.

Por supuesto, si el texto es opaco, también puede usar cualquier serializador binario conciso, y simplemente codificarlo en base-64; por ejemplo, protobuf-net es bastante escueto. Pero el uso de JSON minimiza el código externo necesario en cada extremo, por lo que puede ser la mejor opción.

+0

Según MSDN, JavaScriptSerializer se encuentra en System.Web.Extensions.dll que está disponible en .NET 3.5, no necesariamente .NET 3.5 SP1. –

+0

IIRC, se ha marcado como obsoleto y recientemente ha sido "desaprobado" con 3.5 SP1. –

0

sólo tiene que utilizar su propio API .. es fácil crear JSON .. pero también se puede utilizar como bibliotecas JSON JSON.NET ..

feliz de codificación

0

JsonFx.NET tiene un serializador de código abierto que permite serialización hacia/desde clases fuertemente tipadas que podrían ser lo que estás buscando. Puede controlar cómo se serializan las fechas y anular muchos aspectos de la serialización. Incluso interactúa bien con Linq al admitir la serialización de objetos anónimos. La API funciona igual que la serialización .NET XML.

4

Tengo un muy rápido fuente abierta JsonSerializer disponible que puede serializar cualquier POCO o DataContract tipo, incluidas las interfaces, anónimo y tipos finales consolidados, etc.

Ejemplo Básico

var customer = new Customer { Name="Joe Bloggs", Age=31 }; 
var json = JsonSerializer.SerializeToString(customer); 
var fromJson = JsonSerializer.DeserializeFromString<Customer>(json); 
Cuestiones relacionadas