Visual C# 4.0 のバックエンドとの間で JSON をポストおよび取得するアプリケーションを作成しています。
明らかに、JSON をシリアル化/逆シリアル化する最も簡単な方法は System.Web.Script.Serialization.JavaScriptSerializer ですが、その型が null であると主張して ArgumentNullException をスローしている奇妙なエラーが発生しています。
次の JSON を逆シリアル化すると、正常に動作します。
{"results":[
{"Name":"Western Bulldogs",
"updatedAt":"2011-08-22T09:09:09.673Z",
"Nickname":"Bulldogs",
"RemoteId":44,
"Abbreviation":"WB",
"createdAt":"2011-08-22T09:09:09.673Z",
"objectId":"2iSK8FDTA6"}
]}
ただし、(ネストされた辞書を使用して) 2 番目のものを逆シリアル化すると、type is null エラーで失敗します。
{"results":[
{"EndDate":{"iso":"2011-09-06T00:00:00.000Z","__type":"Date"},
"Name":"Round 24",
"updatedAt":"2011-08-22T08:33:54.119Z",
"RemoteId":800,"createdAt":"2011-08-22T08:33:54.119Z",
"Season":{"className":"Season","__type":"Pointer","objectId":"WnsdqIlrd6"},
"Order":24,
"StartDate":{"iso":"2011-08-30T00:00:00.000Z","__type":"Date"},
"objectId":"bLdBfhagi9"}
]}
参考までに、両方のクエリに対して次の方法で逆シリアル化しています。
JavaScriptSerializer jsSerialise = new JavaScriptSerializer();
ObjectIdContainerList contList = jsSerialise.Deserialize<ObjectIdContainerList>(responseString);
ObjectIdContainerList は次のとおりです (注 - objectId プロパティの取得のみに関心があるため、元の JSON オブジェクトのすべてのプロパティを実装しているわけではありません)。
[Serializable]
public class ObjectIdContainerList
{
public ObjectIdContainer[] results { get; set; }
}
[Serializable]
public class ObjectIdContainer
{
public String objectId { get; set; }
}
最初のクエリは、まったく同じコードとオブジェクトで問題なく逆シリアル化されます。
助言がありますか?JSON.NETに行くだけでいいのでしょうか?