Share via


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.

Bb412179.note(es-es,VS.100).gifNota:
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

  1. 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

  1. Cree una instancia del tipo Person.

    Person p = new Person();
    p.name = "John";
    p.age = 42;
    
  2. Serialice el objeto Person a una secuencia de memoria utilizando el DataContractJsonSerializer.

    MemoryStream stream1 = new MemoryStream();
    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Person));
    
  3. Utilice el método WriteObject para escribir datos JSON en la secuencia.

    ser.WriteObject(stream1, p);
    
  4. 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

  1. 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);
    
  2. Muestre los resultados.

    Console.Write("Deserialized back, got name=");
    Console.Write(p2.name);
    Console.Write(", age=");
    Console.WriteLine(p2.age);
    

Ejemplo

Bb412179.note(es-es,VS.100).gifNota:
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