[Tip] Serialización/Deserialización Json omitiendo "JsonProperty" Name (o no) !


Resultado de imagen de json

Hoy me encontré con una situación en la que un modelo/dto necesiba ser serializado/deserializado de distinta manera dependiendo de ciertas situaciones. ¿Como se llega a esta situación?

¡Bueno, no es que suela ser habitual, pero ocurre, y en concreto, cuando desarrollas un Middlewares (NetCore) que necesita de integración entre un Front (Angular) que lo consume y un Backoffice (Python) que utiliza. Si a esto le añadimos distintos equipos, tiempos ajustados, cambios de requisitos, etc., pues puedes ser hasta “normal” !

A continuación puedes ver la solución, que ademas puedes localizarla en Github:

public class OmitJsonPropertyNameContractResolver : DefaultContractResolver
{
    protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
    {
        JsonProperty property = base.CreateProperty(member, memberSerialization);

        if (!string.IsNullOrWhiteSpace(property.UnderlyingName))
            property.PropertyName = property.UnderlyingName;

        return property;
    }
}

Ejemplos y casos de usos:

public static class Program
{
    static void Main(string[] args)
    {
        // Use case 1: Standard deserialization
        string json1 = "{\"first_name\":\"Juan Luis\",\"LastName\":\"Guerrero\"}";
        var p1 = JsonConvert.DeserializeObject<Person>(json1);
        Console.WriteLine("Person 1:");
        Console.WriteLine($"\t{JsonConvert.SerializeObject(p1)}");


        // Use Case 2,3, 4 settings:
        var setting = new JsonSerializerSettings
        {
            ContractResolver = new OmitJsonPropertyNameContractResolver()
        };


        // Use Case 2: JsonProperty Name ignored/omited when serialize
        var p2 = JsonConvert.DeserializeObject<Person>(json1);
        Console.WriteLine("Person 2:");
        Console.WriteLine($"\t{JsonConvert.SerializeObject(p2, setting)}");


        // Use Case 3: JsonProperty Name ignored/omited when Deserialize
        string json3 = "{\"FirstName\":\"Juan Luis\",\"LastName\":\"Guerrero\"}";
        var p3 = JsonConvert.DeserializeObject<Person>(json3, setting);
        Console.WriteLine("Person 3:");
        Console.WriteLine($"\t{JsonConvert.SerializeObject(p3)}");


        // Use Case 4: JsonProperty Name ignored/omited when Serialice & Deserialize
        string json4 = "{\"FirstName\":\"Juan Luis\",\"LastName\":\"Guerrero\"}";
        var p4 = JsonConvert.DeserializeObject<Person>(json4, setting);
        Console.WriteLine("Person 4:");
        Console.WriteLine($"\t{JsonConvert.SerializeObject(p4, setting)}");
    }
}

Cuya salida por consola es la siguiente:

Poco más que añadir en este TIP. ¡Espero que sirva de ayuda !
Un saludo

Responder

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 )

Google photo

Estás comentando usando tu cuenta de Google. 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 )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios .