【发布时间】:2012-03-24 06:10:20
【问题描述】:
使用 Json.NET 检索 C# 中可能不存在的 JSON 值的最佳做法是什么?
现在,我正在处理一个 JSON 提供程序,它返回的 JSON 有时包含某些键/值对,有时不包含。我一直在使用(可能是错误的)这种方法来获取我的值(获取双精度值的示例):
if(null != jToken["width"])
width = double.Parse(jToken["width"].ToString());
else
width = 100;
现在效果很好,但是当它们很多时,它很麻烦。我最终写了一个扩展方法,只有 在 写完之后我才想知道我是不是很愚蠢......无论如何,这是扩展方法(我只包括双精度和字符串的情况,但是实际上我还有很多):
public static T GetValue<T>(this JToken jToken, string key,
T defaultValue = default(T))
{
T returnValue = defaultValue;
if (jToken[key] != null)
{
object data = null;
string sData = jToken[key].ToString();
Type type = typeof(T);
if (type is double)
data = double.Parse(sData);
else if (type is string)
data = sData;
if (null == data && type.IsValueType)
throw new ArgumentException("Cannot parse type \"" +
type.FullName + "\" from value \"" + sData + "\"");
returnValue = (T)Convert.ChangeType(data,
type, CultureInfo.InvariantCulture);
}
return returnValue;
}
下面是一个使用扩展方法的例子:
width = jToken.GetValue<double>("width", 100);
顺便说一句,请原谅可能是一个非常愚蠢的问题,因为它似乎应该有一个内置函数......我确实尝试过谷歌和Json.NET文档,但是我要么无能为力找到我的问题的解决方案,或者在文档中不清楚。
【问题讨论】:
-
我知道有点晚了,但你可能想试试下面这个简化版的
GetValue -
string rootValue = jToken.Value<string>()