Windows Tips & Tricks. Cómo serializar un objeto a un array de bytes Json

[Nota: Este artículo pertenece a las series de Windows Phone Tips & Tricks y de Windows 8 Tips & Tricks de MSDN España]

Hola,

En una app que estoy haciendo para Windows Phone 8 llamo a una API de un servicio web. Esta API necesita que le pase los parámetros en un Json. Y le tengo que pasar el Json en el contenido de la petición POST como un array de bytes.

Por esa razón utilizo el siguiente método que convierte un objeto de una clase cualquiera a un array de bytes con el Json correspondiente:

using System.Runtime.Serialization.Json;

// Serializa un objeto a un array de bytes Json
private byte[] ToJson(T obj)
{
    using (MemoryStream stream = new MemoryStream())
    {
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
        serializer.WriteObject(stream, obj);
        stream.Position = 0;
        return stream.ToArray();
    }
}

Imaginemos que el Json con los parámetros que espera la API tiene este aspecto:

{
    "username": "username",
    "password": "sha1hash",
    "items": [
        {
            "id": "id1",
            "name": "name1",
            "type": "type1"
        },
        {
            "id": "id2",
            "name": "name2",
            "type": "type2"
        },
        {
            "id": "id3",
            "name": "name3",
            "type": "type3"
        }
    ]
}

Estas serían las clases de la info a serializar:

[DataContract]
private class ItemParam
{
    public ItemParam() {}

    [DataMember]
    public string id;
    [DataMember]
    public string name;
    [DataMember]
    public string type;
}

[DataContract]
private class ListItemsParam
{
    public ListItemsParam() {}

    [DataMember]
    public string username;
    [DataMember]
    public string password;
    [DataMember]
    public ItemParam[] items;
}

Y así serializaría la info con el método del principio:

byte[] jsonContent = ToJson(
    new ListItemsParam()
    {
        username = "username",
        password = "sha1hash",
        items = new ItemParam[] {
            new ItemParam() { id = "id1", name = "name1", type = "type1" },
            new ItemParam() { id = "id2", name = "name2", type = "type2" }
            new ItemParam() { id = "id3", name = "name3", type = "type3" }
        }
    }
);

Nota: este mismo código también lo he usado con éxito en apps de la Tienda Windows en Windows 8.

Espero que te sea de utilidad.

Un saludo,

Alejandro Campos Magencio (@alejacma)

PD: Mantente informado de todas las novedades de Microsoft para los desarrolladores españoles a través del Twitter de MSDN, el Facebook de MSDN, el Blog de MSDN y la Newsletter MSDN Flash.

About these ads

3 pensamientos en “Windows Tips & Tricks. Cómo serializar un objeto a un array de bytes Json

  1. Pingback: Tips & Tricks de desarrollo para Windows 8 - MSDN España - Site Home - MSDN Blogs

  2. Pingback: Windows Phone Tips & Tricks. Cómo realizar peticiones web http GET y POST con async-await-Task « ¡Desarrolladores, desarrolladores, desarrolladores!

  3. Pingback: Tips & Tricks de desarrollo para Windows Phone - MSDN España - Site Home - MSDN Blogs

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s