2

次のシナリオを検討してください。

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です。JsonSerializerSettingsDeserializeObject に引数を使用すると、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>. これは可能ですか?

4

0 に答える 0