JSON.NET:将JSON对象的一部分反序列化为字典

时间:2010-10-27 16:05:30

标签: .net json.net

我有这样的JSON:

{
   "Property":"Blah blah",
   "Dictionary": {
        "Key1" : "Value1",
        "Key2" : "Value2",
        "Key3" : "Value3"
   }
}

我想将“Dictionary”对象提取为字典(所以它就像Key1 => Value1等)。如果我直接使用“Dictionary”对象,我可以使用:

 JsonConvert.DeserializeObject<Dictionary<string, string>>

将Dictionary属性作为字典的最佳方法是什么?

提前致谢! 添

4 个答案:

答案 0 :(得分:10)

我花了一点时间才弄明白,但是我觉得使用字符串解析或正则表达式获得我想要的内部JSON感觉不太好。

足够简单;我在这些方面做了一些事情来获取内部数据:

var jObj = JObject.Parse(jsonText);
var innerJObj = JObject.FromObject(jObj["Dictionary"]);

运作良好。

答案 1 :(得分:1)

我认为您必须解析JSON并删除外部对象。您可以指定要反序列化的对象类型,但没有办法告诉它不要反序列化最外层的对象。

答案 2 :(得分:0)

供参考,your answer(de)serialize json fragments。另外answered here,但您的解决方案看起来更简洁。 对性能差异感到好奇......

答案 3 :(得分:0)

您还可以在类中将属性定义为Dictionary

 var str = @"{
   ""Property"":""Blah blah"",
   ""Dictionary"": {
       ""Key1"" : ""Value1"",
       ""Key2"" : ""Value2"",
       ""Key3"" : ""Value3""
   }
 }";

 class MyObject {
   string Property { get; set; }
   Dictionary<string, string> Dictionary { get; set; }
 }

 MyObject obj = JsonConvert.DeserializeObject<MyObject>(str);
 var dict = obj.Dictionary;