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