2014-09-29 4 views
33

을 분석 JSON.NET 데이터 중 구문 분석 오류를 무시 :내가 미리 정의 된 데이터 구조와 객체가

public class A 
{ 
    public string Id {get;set;} 
    public bool? Enabled {get;set;} 
    public int? Age {get;set;} 
} 

와 JSON은 내가 긍정적 인 방법으로 JSON의 오류를 처리 할

{ "Id": "123", "Enabled": true, "Age": 23 } 

있어야하는데 서버가 정의 된 데이터 유형에 대해 예기치 않은 값을 반환 할 때마다 무시하고 기본값 (null)을 설정합니다.

지금 JSON 내가 JSON 리더 예외를 받고 있어요 부분적으로 무효 인 경우 :

{ "Id": "123", "Enabled": "NotABoolValue", "Age": 23 } 

내가 모든 물건을하지 않습니다.

new A() { Id = "123", Enabled = null, Age = 23 } 

및 분석 경고 가능한 경우 : 는 내가 원하는 개체를 얻을 수 있습니다. JSON.NET으로 구현할 수 있습니까? HandleDeserializationError 다음과 같은 방법

var a = JsonConvert.DeserializeObject<A>("-- JSON STRING --", new JsonSerializerSettings 
    { 
     Error = HandleDeserializationError 
    }); 

:

답변

61

것은 사용, 다음 코드를 역 직렬화 오류를 처리 할 수 ​​있으려면 오류가로

public void HandleDeserializationError(object sender, ErrorEventArgs errorArgs) 
{ 
    var currentError = errorArgs.ErrorContext.Error.Message; 
    errorArgs.ErrorContext.Handled = true; 
} 

HandleDeserializationError는 여러 번 호출됩니다 json 문자열에. 오류를 일으키는 속성은 초기화되지 않습니다.

+1

은 훌륭합니다. 그게 바로 제가 찾고 있던 것입니다! Thanks –

+17

ErrorEventArgs는 System.IO.ErrorEventArgs가 아니라 Newtonsoft.Json.Serialization.ErrorEventArgs입니다. –

+0

Excelent! 이 일! – Yonedev

관련 문제