Cómo serializar y deserializar datos JSON
JSON (notación de objetos JavaScript) es un formato de codificación de datos eficaz que permite intercambios rápidos de cantidades pequeñas de datos entre los exploradores de cliente y servicios web con AJAX (JavaScript asincrónico y XML) habilitado.
En este tema se muestra cómo serializar objetos de tipo .NET en datos codificados mediante JSON y, a continuación, deserializar los datos en formato JSON en instancias de tipos .NET mediante el DataContractJsonSerializer. En este ejemplo, se usa un contrato de datos para mostrar la serialización y deserialización de un tipo Person
definido por el usuario.
Normalmente, Windows Communication Foundation (WCF) controla automáticamente la serialización y deserialización de JSON cuando utiliza tipos de contrato de datos en operaciones de servicio que se exponen sobre extremos con AJAX habilitado. Sin embargo, en algunos casos puede necesitar trabajar directamente con datos de JSON; éste es el escenario que este tema describe.
Nota: |
---|
Si se produce un error durante la serialización de una respuesta saliente en el servidor o la operación de respuesta inicia una excepción por cualquier otro motivo, puede que no se devuelva al cliente como error. |
Este tema se basa en el ejemplo Serialización JSON.
Para definir el contrato de datos de una Persona
Defina el contrato de datos para
Person
adjuntando DataContractAttribute a la clase y el atributo DataMemberAttribute a los miembros que desee serializar. Para obtener más información sobre los contratos de datos, vea Diseño de contratos de servicios.[DataContract] internal class Person { [DataMember] internal string name; [DataMember] internal int age; }
Para serializar una instancia de tipo Persona a JSON
Cree una instancia del tipo
Person
.Person p = new Person(); p.name = "John"; p.age = 42;
Serialice el objeto
Person
a una secuencia de memoria utilizando el DataContractJsonSerializer.MemoryStream stream1 = new MemoryStream(); DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Person));
Utilice el método WriteObject para escribir datos JSON en la secuencia.
ser.WriteObject(stream1, p);
Muestre la salida JSON.
stream1.Position = 0; StreamReader sr = new StreamReader(stream1); Console.Write("JSON form of Person object: "); Console.WriteLine(sr.ReadToEnd());
Deserialización de una instancia de tipo Persona a partir de JSON
Deserialice los datos codificados con JSON en una nueva instancia de
Person
utilizando el método ReadObject de DataContractJsonSerializer:stream1.Position = 0; Person p2 = (Person)ser.ReadObject(stream1);
Muestre los resultados.
Console.Write("Deserialized back, got name="); Console.Write(p2.name); Console.Write(", age="); Console.WriteLine(p2.age);
Ejemplo
Nota: |
---|
El serializador de JSON inicia una excepción de serialización para los contratos de datos que tienen varios miembros con el mismo nombre, tal y como se muestra en el siguiente código de ejemplo. |
[DataContract]
public class TestDuplicateDataBase
{
[DataMember]
public int field1 = 123;
}
[DataContract]
public class TestDuplicateDataDerived : TestDuplicateDataBase
{
[DataMember]
public new int field1 = 999;
}
Vea también
Conceptos
Serialización independiente de JSON
Compatibilidad con JSON y otros formatos de transferencia de datos