Ich verwende Newtonsoft.Json, um mit einigen JSON-Daten zu arbeiten, die mir zurückgegeben werden. Je nachdem, was ich verlangen kann ich entweder wieder etwas, das wie folgt aussieht:JSON-Einzelobjekt und Array behandeln
{
"TotalRecords":2,
"Result":
[
{
"Id":24379,
"AccountName":"foo"
},
{
"Id":37209,
"AccountName":"bar"
}
],
"ResponseCode":0,
"Status":"OK",
"Error":"None"
}
oder
{
"Result":
{
"Id":24379,
"AccountName":"foo"
},
"ResponseCode":0,
"Status":"OK",
"Error":"None"
}
Sosometimes „Ergebnis“ ist ein Array von Ergebnissen oder „Ergebnis“ könnte eine einzige Antwort sein.
Ich habe versucht, mit der Antwort von How to handle both a single item and an array for the same property using JSON.net, aber ich bekomme immer noch Fehler.
Insbesondere Ich bin ein schaut
Newtonsoft.json.jsonSerializationException: 'Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List'...
Individuelle Konverter bekommen wie:
public class SingleOrArrayConverter<T> : JsonConverter
{
public override bool CanConvert(Type objecType)
{
return (objecType == typeof(List<T>));
}
public override object ReadJson(JsonReader reader, Type objecType, object existingValue,
JsonSerializer serializer)
{
JToken token = JToken.Load(reader);
if (token.Type == JTokenType.Array)
{
return token.ToObject<List<T>>();
}
return new List<T> { token.ToObject<T>() };
}
public override bool CanWrite
{
get { return false; }
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
Meine Antwort Klasse (n) aussehen
public class TestResponse
{
[JsonProperty("Result")]
[JsonConverter(typeof(SingleOrArrayConverter<string>))]
public List<DeserializedResult> Result { get; set; }
}
public class DeserializedResult
{
public string Id { get; set; }
public string AccountName { get; set; }
}
Und schließlich sieht meine Anfrage wie
List<TestResponse> list = JsonConvert.DeserializeObject<List<TestResponse>>(response.Content);
Haben Sie nur zwei Arten von Antworten? –
Sie werden immer nur eines dieser beiden Formate folgen, obwohl der Inhalt natürlich anders sein wird. Manchmal hat "Ergebnis" mehrere Felder, manchmal nur ein oder zwei, unabhängig davon, ob es ein einzelnes Objekt oder ein Array von bis zu 100 Objekten zurückgibt. – gilliduck
Jetzt werde ich versuchen, eine Code-Lösung zu schreiben. –