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?
3 respuestas
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!
Prueba esto
var JsonObj = JObject.Parse(json);
foreach(var keyvaluepair in JsonObj.Cast<KeyValuePair<string,JToken>>().ToList())
{
//keyvaluepair.Key
//keyvaluepair.Value
}
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
}
Preguntas relacionadas
Nuevas preguntas
c#
C # (pronunciado "see sharp") es un lenguaje de programación multi-paradigma de alto nivel, estáticamente tipado desarrollado por Microsoft. El código C # generalmente se dirige a la familia de herramientas y tiempos de ejecución .NET de Microsoft, que incluyen .NET Framework, .NET Core y Xamarin, entre otros. Use esta etiqueta para preguntas sobre el código escrito en las especificaciones formales de C # o C #.