es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

.NET 6 – Cambio de Mayúsculas/Minúsculas en las Propiedades Json

¿Cómo puedo cambiar el formato de mayúsculas de los nombres de las propiedades de un JSON sin realizar enlace de modelos?
La serialización de JsonElement ignora las opciones PropertyNaming de JsonSerializer, como también se confirma aquí: https://github.com/dotnet/runtime/issues/61843
El uso sugerido de JsonNode/JsonObject produce el mismo comportamiento.

¿Algún consejo sobre cómo lograr esto?

Como ejemplo, quiero cambiar esto:

{
    "MyProperty": 5,
    "MyComplexProperty": {
        "MyOtherProperty": "value",
        "MyThirdProperty": true
    }
}

a esto:

{
    "myProperty": 5,
    "myComplexProperty": {
        "myOtherProperty": "value",
        "myThirdProperty": true
    }
}

Saludos.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una forma de cambiar el formato de mayúsculas de los nombres de las propiedades en un JSON sin realizar un enlace de modelos es usar una política de nombres personalizada con la clase JsonSerializerOptions.

    Aquí tienes un ejemplo:

    string jsonString = @"
        {
            ""MyPoperty"" : 5,
            ""MyComplexProperty"" : {
                ""MyOtherProperty"": ""value"",
                ""MyThirdProperty"": true
            }
        }
    ";
    
    JsonSerializerOptions options = new JsonSerializerOptions
    {
        PropertyNamingPolicy = new CamelCaseNamingPolicy() // política personalizada para el formato camel
    };
    
    JsonDocument jsonDocument = JsonDocument.Parse(jsonString);
    
    // serializar y escribir el JSON modificado en la consola
    using (JsonWriter writer = new Utf8JsonWriter(Console.OpenStandardOutput()))
    {
        jsonDocument.RootElement.WriteTo(writer, options);
    }
    

    Esto generará el siguiente JSON con formato camel para los nombres de las propiedades:

    {
        "myPoperty": 5,
        "myComplexProperty": {
            "myOtherProperty": "value",
            "myThirdProperty": true
        }
    }
    

    En este ejemplo, estamos creando una instancia de JsonSerializerOptions y estableciendo su propiedad PropertyNamingPolicy en una clase CamelCaseNamingPolicy personalizada, que implementa una estrategia de formato camel para los nombres de las propiedades.

    Luego, estamos analizando la cadena JSON original usando la clase JsonDocument, que representa un documento JSON inmutable. Podemos acceder a su elemento raíz directamente utilizando la propiedad RootElement.

    Finalmente, estamos utilizando una instancia de JsonWriter para serializar el JSON modificado y mostrarlo en la consola. Ten en cuenta que pasamos la instancia de JsonSerializerOptions como segundo argumento al método WriteTo().

    Este enfoque te permite personalizar la política de nombres para las propiedades en un documento JSON sin tener que crear una clase de modelo correspondiente.

Comments are closed.