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);

这将反序列化为 a 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]是 a JObject,我似乎无法说服 json.net 进一步反序列化为另一个Dictionary<string, object>. 这可能吗?

4

0 回答 0