Json.NETを使用してC#にも存在しない可能性があるJSON値を取得するためのベストプラクティスは何ですか?
現在、私はJSONプロバイダーを扱っています。JSONプロバイダーは、特定のキーと値のペアを含む場合と含まない場合があるJSONを返します。私は(おそらく間違って)このメソッドを使用して値を取得しています(doubleを取得する例):
if(null != jToken["width"])
width = double.Parse(jToken["width"].ToString());
else
width = 100;
今では問題なく動作しますが、それらがたくさんあると面倒です。結局、拡張メソッドを書いてしまいましたが、それを書いて初めて、私が愚かだったのではないかと思いました...とにかく、ここに拡張メソッドがあります(doubleとstringの場合のみを含めますが、実際にはかなり多くのもっと):
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);
ところで、組み込みの関数があるはずのように思えるので、本当に馬鹿げた質問になるかもしれないことを許してください...私はGoogleとJson.NETを試しましたドキュメントを解決策を見つけることにません私の質問またはそれはドキュメントでは明確ではありません。
GetValue
以下のこの簡略化されたバージョンを試すことをお勧めします