Thực tiễn tốt nhất để truy xuất các giá trị JSON có thể không tồn tại trong C# bằng cách sử dụng Json.NET là gì?Nhận giá trị từ JToken có thể không tồn tại (thực tiễn tốt nhất)
Hiện tại tôi đang xử lý một nhà cung cấp JSON trả về JSON đôi khi chứa các cặp khóa/giá trị nhất định và đôi khi không có. Tôi đã sử dụng (có lẽ không chính xác) phương pháp này để lấy 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ờ hoạt động tốt, nhưng khi có rất nhiều. Tôi đã kết thúc viết một phương pháp mở rộng, và chỉ sau khi viết nó đã làm tôi tự hỏi liệu có lẽ tôi đã được stupid ... anyways, đây là phương pháp mở rộng (tôi chỉ bao gồm các trường hợp cho đôi và chuỗi, nhưng trong thực tế tôi có khá một vài chi tiết):
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ụ của việc sử dụng các phương pháp khuyến nông:
width = jToken.GetValue<double>("width", 100);
BTW, hãy tha thứ cho những gì có thể là một câu hỏi thực sự ngớ ngẩn, vì nó có vẻ giống như một cái gì đó có phải là một được xây dựng trong chức năng cho ... Tôi đã thử Google, và tài liệu Json.NET, tuy nhiên tôi là một trong hai t tìm giải pháp cho câu hỏi của tôi hoặc không rõ ràng trong tài liệu.
Tôi biết nó là hơi muộn, nhưng bạn có thể muốn thử phiên bản đơn giản này của 'GetValue' dưới –