私はNewtonsoft.Jsonを使用して、返されてくるJSONデータを処理しています。だから、時には「結果は」結果の配列または「結果」は、単一の応答可能性があるJSON単一オブジェクトと配列の処理
{
"TotalRecords":2,
"Result":
[
{
"Id":24379,
"AccountName":"foo"
},
{
"Id":37209,
"AccountName":"bar"
}
],
"ResponseCode":0,
"Status":"OK",
"Error":"None"
}
または
{
"Result":
{
"Id":24379,
"AccountName":"foo"
},
"ResponseCode":0,
"Status":"OK",
"Error":"None"
}
:私はバックのように見える何かを得ることができますいずれかの要求内容に応じて。
私はHow to handle both a single item and an array for the same property using JSON.netの答えを使ってみましたが、まだエラーが発生します。特に
私は
Newtonsoft.json.jsonSerializationException: 'Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List'...
カスタムコンバータを取得していますと、次のようになります。
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();
}
}
私の応答クラス(ES)最後に
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; }
}
そして、私の要求ルックスのように見えますlike
List<TestResponse> list = JsonConvert.DeserializeObject<List<TestResponse>>(response.Content);
答えは2種類だけですか? –
コンテンツは明らかに異なっていますが、これらの2つのフォーマットのうちの1つに従うことになります。時には「結果」には、単一のオブジェクトまたは100個までのオブジェクトの配列を返すかどうかにかかわらず、複数のフィールドがあります。 – gilliduck
今、コードソリューションを作成しようとします。 –