Json.NET kullanarak C # 'da bulunmayan JSON değerlerini almak için en iyi uygulama nedir ?
Şu anda, bazen belirli anahtar / değer çiftlerini içeren ve bazen içermeyen JSON döndüren bir JSON sağlayıcısıyla uğraşıyorum. Değerlerimi elde etmek için (belki de yanlış bir şekilde) bu yöntemi kullanıyorum (örneğin bir çift almak için):
if(null != jToken["width"])
width = double.Parse(jToken["width"].ToString());
else
width = 100;
Şimdi bu iyi çalışıyor, ancak birçoğu olduğunda hantal. Bir uzatma yöntemi yazmayı bıraktım ve ancak yazdıktan sonra aptal olup olmadığımı merak ettim ... her neyse, işte uzatma yöntemi (sadece çift ve dizge için durumları dahil ediyorum, ancak gerçekte epeyce var Daha):
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;
}
Ve burada uzantı yönteminin kullanımına bir örnek verilmiştir:
width = jToken.GetValue<double>("width", 100);
BTW, Lütfen gerçekten aptalca bir sorunun ne olabileceğini affedin, çünkü bunun için yerleşik bir işlev olması gereken bir şey gibi görünüyor ... Google ve Json.NET belgelerini denedim , ancak çözüm bulmada ya beceriksizim sorum ya da belgelerde net değil.
GetValueaşağıdaki basitleştirilmiş sürümü denemek isteyebilirsiniz