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.

Mapeo de pares clave-valor dinámico Json sin el uso de dynamic o Dictionary en C#

Tengo un json como el siguiente:

{
    "date": "2021-12-04",
    "SMIFUND": {
        "ACC": 5.7299,
        "TATA": 5.155546,
        "RELIANCE": 108.779225
    }
}

Ahora,

SMIFUND -> (parámetro de entrada para obtener este resultado json)
ACC, TATA, RELIANCE -> dinámico

Ahora, como parte de la tarea, tengo que deserializar usando Newtonsoft.json y no puedo usar Dictionary<string, float=""> o dynamic, sino deserializar directamente el json completo o la sección SMIFUND.

Mi estructura de clase es la siguiente:

public class Broker
{
    public string Date { get; set; }
    public List<fund> funds{ get; set; }
}

public class Fund
{
    public string StockName { get; set; }
    public float Price { get; set; }
}

Puedo dividir el resultado en dos partes:

JObject jsonObject = JObject.Parse(result);

brokerObject.Date = (string)jsonObject["date"];

Pero cuando intento convertir a una lista de Fund, me muestra un error de deserialización de nombre de valor:

“`csharp
var fundsList = JsonConvert.DeserializeObject<><fund>>(jsonObject["{input}"].ToString());

{input} es SMIFUND
“`</string,>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para deserializar directamente la sección SMIFUND sin usar Dictionary<string, float=""> ni dynamic, puedes modificar la estructura de la clase Broker para tener una propiedad Dictionary<string, float=""> en lugar de una propiedad List<fund>:

    public class Broker
    {
        public string Date { get; set; }
        public Dictionary<string, float=""> Funds { get; set; }
    }
    

    Luego, puedes deserializar la cadena JSON directamente en un objeto Broker:

    Broker brokerObject = JsonConvert.DeserializeObject<broker>(result);
    

    Para acceder a la sección SMIFUND, simplemente puedes usar la propiedad Funds del objeto Broker:

    Dictionary<string, float=""> smiFund = brokerObject.Funds["SMIFUND"];
    foreach (KeyValuePair<string, float=""> stock in smiFund)
    {
        Console.WriteLine($"{stock.Key}: {stock.Value}");
    }
    

    Esto imprimirá:

    ACC: 5.7299
    TATA: 5.155546
    RELIANCE: 108.779225
    </string,></string,></string,></string,></string,>

Comments are closed.