Estoy tratando de encontrar una manera de analizar los mensajes de error JSON en C #. Puedo recibir una respuesta que se ve así:

{
  "errors": {
    "title": ["can't be blank"]
  }
}

O

{
    "errors": {
        "inventory_policy": ["is not included in the list"]
    }
}

O tal vez recibiré más de un error en la respuesta.

¿Cómo podría analizar ese tipo de respuesta dinámica en C #? La clave es diferente para cada mensaje de error. ¿Podría deserializarlo a un objeto que solo tiene un Diccionario de cadenas llamado errores?

1
xMetalDetectorx 20 ene. 2018 a las 08:25

3 respuestas

La mejor respuesta

La clase JObject tiene un diccionario interno de esas propiedades. Las instancias de este se pueden enumerar y se puede acceder a cada uno de los objetos secundarios. Aquí hay un código de muestra:

string input = "{  \"errors\": {    \"title\": [\"can't be blank\"]  }}";
JObject json = JObject.Parse(input);

foreach (var item in json)
{
    Console.WriteLine($"{item.Key} _ {item.Value}");
}

La clase JObject se define en el paquete Newtonsoft.Json, y para hacer referencia a ella desde su proyecto necesitará agregar la siguiente referencia de paquete en su archivo csproj (o simplemente hacerlo usted mismo usando Nuget Package Manager):

  <ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
  </ItemGroup>

¡Espero que esto ayude!

2
Artak 20 ene. 2018 a las 06:03

Prueba esto

var JsonObj = JObject.Parse(json);

foreach(var keyvaluepair in JsonObj.Cast<KeyValuePair<string,JToken>>().ToList())
{
    //keyvaluepair.Key
    //keyvaluepair.Value
}
1
Ramesh Rajendran 20 ene. 2018 a las 05:40

Puede deserializar json a una variable dinámica y acceder a las propiedades que están en el objeto

dynamic dynJson = JsonConvert.DeserializeObject(json);
foreach (var item in dynJson)
{
     // access dynamic property here
}
-1
programtreasures 20 ene. 2018 a las 05:36
48352917