Windows Phone アプリで動的 JSON を受信しています。分離ストレージに保存できるオブジェクトに完全に逆シリアル化できる必要があります。
このアプリケーションでは、サーバーから返される JSON のタイプを正確に予測できないため、クラス構造にロックされるのを避けるのが最善です。
Json.NET を使用して逆シリアル化する方法の例を次に示します。
JsonConvert.DeserializeObject<Dictionary<string, object>>(jsonString);
この例では、ディクショナリに保持される値は、リスト、ディクショナリ、または文字列の可能性があります。
このアプローチの問題は、 JsonConvert.DeserializeObject(...) メソッドが単に浅い変換を実行しているように見えることです。ネストされたオブジェクトは、JArray または JObject 型です。これらのオブジェクトを保存しようとすると、次の例外がスローされます。
「データ コントラクト名 ArrayOfJTokenNewtonsoft.Json.Linq を持つ型 Newtonsoft.Json.Linq.JArray は想定されていません。たとえば、KnownTypeAttribute 属性を使用するか、それらをリストに追加することにより、既知の型のリストに静的に認識されていない型を追加します。 DataContractSerializer に渡される既知の型の。」
ここで私が見逃している明らかなものはありますか?
Android および iOS プラットフォームでは、これはサードパーティの JSON ライブラリ実装を使用して簡単に実現できます。
以下に JSON のサンプルをいくつか示しますが、事前にデコードする JSON の正確な構造については正確にはわからないことを覚えておいてください。
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}