2011-08-27 25 views
89

Nếu câu trả lời của tôi có lỗi "chính", tôi cần xử lý lỗi và hiển thị hộp cảnh báo.json.net có phương pháp quan trọng?

Có phương pháp "haskey" trong json.net không? Giống như:

var x= JObject.Parse(string_my); 
if(x.HasKey["error_msg"]) 
    MessageBox.Show("Error!") 
+0

Vui lòng tham khảo câu trả lời của tôi [ở đây] (https://stackoverflow.com/a/47204235/1037314). – Ben

+0

Tôi đã trả lời một câu hỏi có vấn đề tương tự ở đây: https://stackoverflow.com/a/47204235/1037314 – Ben

+0

Có hai biến thể của câu hỏi này: Một biến thể là từ điển JSON là phẳng (không có trẻ em) và một từ khóa khác ở đâu đó trong hệ thống phân cấp của trẻ em. Tại thời điểm viết bài này, ns.json vẫn không có phương thức tiện lợi nào cho phép truy cập dễ dàng để kiểm tra khóa. – ljgww

Trả lời

156

Chỉ cần sử dụng x["error_msg"]. Nếu thuộc tính không tồn tại, nó trả về null.

+18

Điều gì sẽ xảy ra nếu giá trị của thuộc tính là 'null'? –

+40

@AndreasFurster Sau đó, nó sẽ trả về một 'JValue' có' Giá trị' là 'null', không chỉ là' null'. – svick

+0

Nếu thuộc tính có thể là 'null', bạn có thể sử dụng' x ["error_msg"] là Object' để kiểm tra xem thuộc tính có được định nghĩa trong đối tượng JSON – stonito

70

JObject thực hiện IDictionary<string, JToken>, vì vậy bạn có thể sử dụng:

IDictionary<string, JToken> dictionary = x; 
if (dictionary.ContainsKey("error_msg")) 

... hoặc bạn có thể sử dụng TryGetValue. Nó thực hiện cả hai phương pháp bằng cách sử dụng thực hiện giao diện rõ ràng, vì vậy bạn không thể sử dụng chúng mà không cần chuyển đổi thành IDictionary<string, JToken>.

+0

Tôi mỏng này sẽ được từ từ sau đó là câu trả lời được chấp nhận, nhưng cảm ơn. – SevenDays

+2

@ wsevendays, có tốc độ quan trọng đối với bạn ở đây hay chỉ là vi mô (và dựa trên dự đoán)? Bạn nên sử dụng những gì bạn thấy dễ đọc hơn. – svick

+0

Tốc độ xử lý 1GHz của điện thoại WP7 của tôi không lớn và tôi cần phải quan tâm đến tốc độ. – SevenDays

Các vấn đề liên quan