2013-09-25 3 views
7

JObject.Parse (jsonString)가 부울 데이터에 문제를 일으키고 있습니다. 예 : json으로는 다음과 같습니다Json.Net 부울 구문 분석 문제

JObject data = JObject.Parse(str1); 
foreach (var x in data) 
{ 
    string name = x.Key; 
    Console.Write(name + " ("); 
    JToken value = x.Value; 
    Console.Write(value.Type + ")\n"); 
    Console.WriteLine(value); 
} 

이 인쇄를 같은 값 : BoolParam (부울) : 진정한

사례 감도 원인을

{ 
    "BoolParam": true 
} 

내가 구문 분석하려면 다음 코드를 사용 이 json을 나중에 사용하기 위해 저장하면 문제가 발생합니다. 내가 나중에 사용할 때 그러나 JObject.Parse (캐릭터가) 오류가 발생

{ 
    "BoolParam": True 
} 

처럼 저장된 JSON 보이는 잘못된 JSON과 같은 : 가치 분석하는 동안 예기치 않은 문자가 발생했습니다 T. 경로 'BoolParam', 2 호선, 위치 15.

"True"에서 "true"로 대소 문자를 변경하면 작동합니다. 절약 할 때 사례를 변경하기 위해이 해킹을 추가하고 싶지 않지만이 시나리오를 처리하는 더 좋은 방법이 있습니다.

답변

5

저장할 때이 해킹을 추가하지 말고 이 시나리오를 처리하는 데 더 좋은 방법입니다.

아니요, 나중에 Newtonsoft JSON과 같은 JSON 직렬 변환기를 사용하여 비 직렬화 할 수 있도록하려면 저장시 유효한 JSON을 생성해야합니다. 저장 라우팅을 수정하는 것이 여기에 올바른 방법입니다.

+0

유효한 json을 저장해야한다는 것을 이해합니다. 문제를 일으키는 것은 내가 "True"로 값을 얻었지만 유효한 Json 문자열은 "true"를 기대할 때입니다. 따라서 "true"로 구문 분석하는 방법이 궁금합니다. – surya

+1

@surya JSON에 'True'가 포함되어 있으면 유효한 JSON이 아닙니다. 그것은 그렇게 간단합니다. 'true' 토큰은 모두 소문자 여야합니다 (MUST). [JSON 사양] 섹션 2.1 (http://www.ietf.org/rfc/rfc4627.txt?number=4627)을 참조하십시오. Darin이 말했듯이 파서가 올바르게 읽을 수 있도록 JSON을 저장하는 방법을 수정해야합니다. –

+1

수정 프로그램을 추가했지만 이전에 설명하지 못했습니다. 그 사람은 부울 값을 "True"로 변경하지만 Json.net 파서는 변경하지 않았습니다. 구체적으로이 라인은 부울 값에 "참"을 반환합니다. JToken value = x.Value; string val = (value.ToString()); json은 { "Bool": "true"} – surya