将对象反序列化为Dictionary
(JsonConvert.DeserializeObject<IDictionary<string,object>>(json)
)时,嵌套对象被反序列化为JObject
s。是否有可能强制嵌套对象被反序列化为Dictionary
?Json.NET:反序列化嵌套字典
22
A
回答
32
我发现了一种通过提供CustomCreationConverter
落实到所有嵌套对象转换为Dictionary<string,object>
:
class MyConverter : CustomCreationConverter<IDictionary<string, object>>
{
public override IDictionary<string, object> Create(Type objectType)
{
return new Dictionary<string, object>();
}
public override bool CanConvert(Type objectType)
{
// in addition to handling IDictionary<string, object>
// we want to handle the deserialization of dict value
// which is of type object
return objectType == typeof(object) || base.CanConvert(objectType);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.StartObject
|| reader.TokenType == JsonToken.Null)
return base.ReadJson(reader, objectType, existingValue, serializer);
// if the next token is not an object
// then fall back on standard deserializer (strings, numbers etc.)
return serializer.Deserialize(reader);
}
}
class Program
{
static void Main(string[] args)
{
var json = File.ReadAllText(@"c:\test.json");
var obj = JsonConvert.DeserializeObject<IDictionary<string, object>>(
json, new JsonConverter[] {new MyConverter()});
}
}
-1
替代/更新:
我需要反序列化字典的字典String
s和当前的Json.NET(5.0)我没有必要创建一个CustomConverter,我的理由t一起使用(在VB.Net):
JsonConvert.DeserializeObject(Of IDictionary(Of String, IDictionary(Of String, String)))(jsonString)
或者,在C#:
JsonConvert.DeserializeObject<IDictionary<String, IDictionary<String, String>>(jsonString);
相关问题
- 1. Json.NET序列化/反序列化嵌套字典
- 2. 如何反序列化嵌套字典?
- 3. Json.NET不反序列化嵌套对象
- 4. 反序列化JSON嵌套使用Json.NET
- 5. Json.NET:反序列化嵌套的Json
- 6. 使用JSON.NET反序列化字典
- 7. 序列化/反序列化JSON.NET的对象字典
- 8. 使用Json.net和C#反序列化嵌套的json字符串?
- 9. json.net反序列化字符串嵌套类
- 10. Json.net反序列化字典包含字典值dataTable
- 11. 使用JSON.net反序列化嵌套对象列表
- 12. JSON.NET反序列化
- 13. JSON.net反序列化
- 14. 序列化JSON嵌套与Json.net(VB.NET)
- 15. JSON.NET:如何序列化嵌套集合
- 16. Json.NET:将嵌套数组反序列化为强类型对象
- 17. Json.NET反序列化嵌套对象忽略JsonProperty.Required
- 18. 使用JSON.NET反序列化和序列化字典<字符串,对象>
- 19. Json.NET:序列化/反序列化阵列
- 20. 如何使用Json.Net使用自定义键序列化/反序列化字典?
- 21. json.net反序列化具有字典属性,
- 22. 自定义JSON.net反序列化为字典<string,string>
- 23. 反序列化JavaScript的关联数组到C#字典与Json.Net
- 24. JSON.NET反序列化部分作为字典
- 25. 将JSON.NET反序列化为可观察字典[C#]
- 26. 如何使用JSON.NET将JSON反序列化为字典?
- 27. JSON.NET:反序列化JSON对象的一部分,以字典
- 28. C#字典反序列化
- 29. 为json.net反序列化
- 30. 反序列化与Json.NET
这不支持被正确地转换递归/未知JSON结构。 –
这不会回答,因为它具体指的是一个固定的嵌套层次 – Javier