json.net에 중요한 방법이 있습니까?


140

응답에 "오류"키가 있으면 오류를 처리하고 경고 상자를 표시해야합니다.

json.net에 "haskey"메소드가 있습니까? 처럼:

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

1
여기 에 내 답변을 참조 하십시오 .
Ben

나는 비슷한 문제가있는 질문에 대답했다 : stackoverflow.com/a/47204235/1037314
Ben

1
이 질문에는 두 가지 변형이 있습니다. 하나의 변형은 JSON 사전이 평평한 곳 (자식 없음)이고 다른 하나는 키가 자식 계층의 어딘가에있는 것입니다. 이 글을 쓰는 시점에서 ns.json은 여전히 ​​키 테스트를 쉽게 할 수있는 편리한 방법이 없습니다.
ljgww

답변:


240

그냥 사용하십시오 x["error_msg"]. 속성이 존재하지 않으면를 반환합니다 null.


37
속성 값이 null어떻게됩니까?
Andreas Furster

67
@AndreasFurster 그러면 뿐만 아니라 a가 JValue누구 Value인지 를 반환합니다 . nullnull
svick

1
속성이 JSON 속성에 정의되어 있는지 확인하는 데 null사용할 수있는 x["error_msg"] is Object경우
stonito

2
@ user3199329 이것은 혼란스러운 작성 방법 x["error_msg"] != null이므로 속성이 존재하고 값이 있는지 확인하지 않습니다 null.
svick

9
@ WilliamT.Mallard C # 6에서는 null 조건부 인덱스 연산자를 사용하여이를 단순화 할 수 있습니다 myJObject["level1property"]?["level2property"].
svick

98

JObject구현 IDictionary<string, JToken>하여 다음을 사용할 수 있습니다.

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

... 또는 사용할 수 있습니다 TryGetValue. 명시 적 인터페이스 구현을 사용하여 두 메소드를 모두 구현하므로 먼저 변환하지 않으면 사용할 수 없습니다 IDictionary<string, JToken>.


나는 이것이 느리게 받아 들여질 것입니다. 그러나 감사합니다.
SevenDays

2
@wsevendays, 속도가 여기에 중요합니까, 아니면 미세 최적화 중입니까 (그리고 추측에 근거하여)? 더 읽기 쉬운 것을 사용해야합니다.
svick

내 WP7 전화의 1GHz 프로세서 속도가 좋지 않으므로 속도를 신경 써야합니다.
SevenDays

1
@wsevendays : 왜 대답보다 느리거나 빠를까요?
Jon Skeet

24
@wsevenday : 아니요, 사전을 만들지 않습니다 . JObject 이미 구현했습니다 IDictionary<string, JToken> . 이것은 단지 참조 할당입니다. 그리고 아니요, 허용되는 대답은 키가 배열 에 있는지 확인하지 않고 여전히 일반 인덱서를 사용하고 있습니다. 그것이해서 보이는 배열 액세스 것처럼 의미하지 않는다 배열에 액세스 할 수 있습니다. (배열 접근은 처음에는 문자열로 할 수 없습니다.)
Jon Skeet

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.