将json属性解析为特定类型

时间:2014-06-04 16:04:11

标签: c# json json.net

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

    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,则添加一个条件?

1 个答案:

答案 0 :(得分:2)

JToken已经有了内置的ToObject()方法来执行您想要的操作。如果您更改GetPropValue方法以使用它而不是来自JSON的来回转换,一切都应该正常工作:

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