次のシナリオを検討してください。
var toSerialize = new Dictionary<string, object> {
{ "0", new[] { 1, 2 } }
};
string serialized = JsonConvert.SerializeObject(toSerialize);
// serialized == {"0":[1,2]}
var deserialized = JsonConvert.DeserializeObject<Dictionary<string, object>>(serialized);
Dictionary<string, object>
これは、キー "0" に対して 2 つの整数を持つ配列を使用して、 に逆シリアル化します。すごい!
これを試してみましょう:
var toSerialize = new Dictionary<string, object> {
{ "0", new Dictionary<string, object> { { "0.0", new[] { 1, 2 } } } }
};
string serialized = JsonConvert.SerializeObject(toSerialize);
// serialized == {"0":{"0.0":[1,2]}}
var deserialized = JsonConvert.DeserializeObject<Dictionary<string, object>>(serialized);
さて、deserialized["0"]
JObjectです。JsonSerializerSettings
DeserializeObject に引数を使用すると、TypeNameHandling = TypeNameHandling.All
これが解決されます。
さて、私の実際のシナリオでは、ディクショナリ オブジェクトの周りに別のリストがあり、これがさらなる逆シリアル化が可能と思われる場所です。
var toSerialize = new List<Dictionary<string, object>> { new Dictionary<string, object> {
{ "0", new Dictionary<string, object> { { "0.0", new[] { 1, 2 } } } }
} };
string serialized = JsonConvert.SerializeObject(toSerialize);
// serialized == [{"0":{"0.0":[1,2]}}]
var deserialized = JsonConvert.DeserializeObject<IList<Dictionary<string, object>>>(serialized, _jsonSettings);
deserialized[0]
これは、json.netJObject
にさらに逆シリアル化して別のDictionary<string, object>
. これは可能ですか?