我的出发点是这样的(在此简化):
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.JsonReaderException'的例外情况发生在 Newtonsoft.Json.dll但未在用户代码中处理
其他信息:解析时遇到意外的字符 价值:s。路径'',第0行,第0位。
实现这一目标的最佳方法是什么?如果JToken的类型为string,则添加一个条件?
答案 0 :(得分:2)
JToken
已经有了内置的ToObject()
方法来执行您想要的操作。如果您更改GetPropValue
方法以使用它而不是来自JSON的来回转换,一切都应该正常工作:
private object GetPropValue(JToken token, Type type)
{
return token["prop"].ToObject(type);
}