使用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
如下