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.

¿Cómo serializar una cadena en JSON y agrupar por uno de sus valores?

Actualmente estoy serializando una datatable utilizando JsonConvert().SerializeObject(dt) en un formato JSON que se ve algo así:
{"id": "123", "name": "xyz", "value": "a"},{"id": "234", "name": "xyz", "value": "a"},{"id": "789, "name": "x", "value": "b"}, etc.

Me gustaría que el formato estuviera agrupado por valor, por ejemplo:


[
{
"value":"a",
"members":[
{
"id":"123",
"name":"xyz"
},
{
"id":"234",
"name":"xyz"
}
]
},
{
"value":"b",
"members":[
{
"id":"789",
"name":"x"
}
]
}
]

¿Es fácil de lograr esto con Newtonsoft?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, esto se puede lograr con Newtonsoft.Json. Puede agrupar las filas por la columna de valor utilizando la función GroupBy de LINQ y luego crear un nuevo objeto JSON para cada grupo con la estructura requerida. Aquí hay un ejemplo de código que debería lograr el formato deseado:

    “`c #
    usando Newtonsoft.Json.Linq;
    usando System.Data;
    usando System.Linq;

    público string SerializeDataTable(DataTable dt)
    {
    var groupedData = dt.AsEnumerable()
    .GroupBy(row => row [“value”])
    .Select (group => new JObject (
    new JProperty (“value”, group.Key),
    new JProperty (“members”, new JArray (group.Select (row =>
    new JObject (new JProperty (“id”, row [“id”]), new JProperty (“name”, row [“name”])))
    )))
    ));

    devuelve JsonConvert.SerializeObject (groupedData);
    

    }
    “`

    El código anterior agrupa las filas por la columna “value”, crea un nuevo JObject para cada grupo con la estructura requerida y finalmente serializa el resultado en una cadena JSON. Luego puede utilizar esta función en lugar de JsonConvert.SerializeObject(dt) para obtener el formato deseado.

Comments are closed.