Cách thực hành tốt nhất để truy xuất các giá trị JSON thậm chí không tồn tại trong C # bằng Json.NET là gì?
Ngay bây giờ tôi đang làm việc với một nhà cung cấp JSON trả về JSON đôi khi có chứa các cặp khóa / giá trị nhất định và đôi khi không. Tôi đã sử dụng (có lẽ không chính xác) phương pháp này để nhận các giá trị của tôi (ví dụ để nhận được gấp đôi):
if(null != jToken["width"])
width = double.Parse(jToken["width"].ToString());
else
width = 100;
Bây giờ nó hoạt động tốt, nhưng khi có rất nhiều trong số đó thì nó cồng kềnh. Cuối cùng tôi đã viết một phương thức mở rộng và chỉ sau khi viết nó, tôi mới tự hỏi liệu có thể mình ngu ngốc không ... dù sao, đây là phương thức mở rộng (tôi chỉ bao gồm các trường hợp cho chuỗi kép và chuỗi, nhưng thực tế tôi có khá nhiều hơn):
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;
}
Và đây là một ví dụ về việc sử dụng phương thức mở rộng:
width = jToken.GetValue<double>("width", 100);
BTW, xin vui lòng tha thứ cho những gì có thể là một câu hỏi thực sự ngớ ngẩn, vì có vẻ như có thứ gì đó nên có chức năng tích hợp cho ... Tôi đã thử tài liệu của Google và Json.NET , tuy nhiên tôi không tìm được giải pháp cho câu hỏi của tôi hoặc nó không rõ ràng trong tài liệu.
GetValue
dưới đây