将json属性解析为特定类型

我的出发点是这样的(在这里简化):

private object GetPropValue(JToken token, Type type) { return JsonConvert.DeserializeObject(token["prop"].ToString(), type); } 

用法:

 var value = GetPropValue(JObject.Parse(someJsonWithAPropertyNamedProp), typeof(someTypeFoundByReflection)); 

这是有效的,除了那个类型是字符串。

根据文档,JValue的ToString()应该返回一个JSON, 但是当JValue是一个类型字符串时,返回的值不是JSON,而是一个简单的字符串,不包含转义引号。

因此,我得到一个例外:

Newtonsoft.Json.dll中出现“Newtonsoft.Json.JsonReaderException”类型的exception,但未在用户代码中处理

附加信息:解析值时遇到意外的字符:s。 路径”,第0行,第0位。

实现这一目标的最佳方法是什么? 如果JToken是string类型,添加一个条件?

JToken已经有了一个内置的ToObject()方法来做你想要的。 如果你改变你的GetPropValue方法来使用它而不是从JSON来回转换,一切都应该工作正常:

 private object GetPropValue(JToken token, Type type) { return token["prop"].ToObject(type); }