将json属性解析为特定类型

本文关键字:类型 json 属性 | 更新日期: 2023-09-27 18:06:56

我的起点是这样的(这里简化了):

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

用法:

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

可以,只是类型是string。

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

因此,我得到一个异常:

类型为'Newtonsoft.Json '的异常。JsonReaderException'发生在Newtonsoft.Json.dll,但在用户代码中未处理

附加信息:解析时遇到意外字符"路径",行0,位置0.

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

将json属性解析为特定类型

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

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