1

このような JSON 文字列をデシリアライズしたい

{
   "status":"1",
   "since":"1245626956',
   "list":{
      "1":{
         "item_id":"1"
      },
      "2":{
         "item_id":"2"
      }
   }
}

このために、それを解析するオブジェクトがあります

public class ListResponse
{
    public String status { get; set; }
    public String since { get; set; }
    public IDictionary<String, Item> list { get; set; }
}

私はこの文を使用します:

ListResponse list = JsonConvert.DeserializeObject<ListResponse>(message);

それはうまくいきますが、応答がこのようなものになる可能性があるため、問題があります

{
   "status":"1",
   "since":"1245626956',
   "list":[]
}

「リスト」を解析するには配列が必要ですが、私のオブジェクトには IDictionary があるため、例外が発生します。

Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'System.Collections.Generic.IDictionary`2[System.String,Item]' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly.
To fix this error either change the JSON to a JSON object (e.g. {"name":"value"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List<T> that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array.

Linq を使用して JObject を取得し、「手動で」マッピングを行うことなく、この問題を処理するにはどうすればよいですか?

4

1 に答える 1

1

簡単な回避策は、デシリアライズする前にこれを行うことです。

yourString = yourString.Replace("\"list\":[]", "\"list\":{}");
于 2012-06-01T22:49:48.057 に答える