JSON 중 구문 분석 오류를 무시합니다.NET 데이터 해석
데이터 구조가 미리 정의된 개체가 있습니다.
public class A
{
public string Id {get;set;}
public bool? Enabled {get;set;}
public int? Age {get;set;}
}
JSON은 원래
{ "Id": "123", "Enabled": true, "Age": 23 }
JSON 오류를 긍정적인 방법으로 처리하고 서버가 정의된 데이터 유형에 대해 예기치 않은 값을 반환할 때마다 이를 무시하고 기본값을 설정(null)합니다.
현재 JSON이 부분적으로 유효하지 않은 경우 JSON Reader 예외가 발생합니다.
{ "Id": "123", "Enabled": "NotABoolValue", "Age": 23 }
그리고 나는 어떤 물체도 얻지 못한다.내가 원하는 것은 오브젝트를 얻는 것이다.
new A() { Id = "123", Enabled = null, Age = 23 }
및 가능한 경우 구문 분석 경고.JSON으로 달성할 수 있습니까?인터넷?
역직렬화 오류를 처리하려면 다음 코드를 사용합니다.
var a = JsonConvert.DeserializeObject<A>("-- JSON STRING --", new JsonSerializerSettings
{
Error = HandleDeserializationError
});
어디에HandleDeserializationError
는 다음 방식입니다.
public void HandleDeserializationError(object sender, ErrorEventArgs errorArgs)
{
var currentError = errorArgs.ErrorContext.Error.Message;
errorArgs.ErrorContext.Handled = true;
}
그HandleDeserializationError
json 문자열에 오류가 있는 횟수만큼 호출됩니다.에러의 원인이 되고 있는 속성은 초기화되지 않습니다.
Ilija의 솔루션과 동일하지만 게으름뱅이/급행자(공로)를 위한 오넬리너
var settings = new JsonSerializerSettings { Error = (se, ev) => { ev.ErrorContext.Handled = true; } };
JsonConvert.DeserializeObject<YourType>(yourJsonStringVariable, settings);
잼을 위한 소품 =)
다른 방법이 있습니다. 예를 들어, 뉴턴 json을 사용하여 탈메랄라이제이션과 세랄라이제이션이 이루어지는 nuget 패키지를 사용하는 경우입니다.패키지가 오류를 처리하지 않으면 이 문제가 발생할 수 있습니다.위의 솔루션을 사용할 수 없습니다.오브젝트 레벨에서 처리해야 합니다.여기서 OnErrorAttribute가 도움이 됩니다.따라서 아래 코드는 모든 속성에 대한 오류를 탐지합니다. OnError 함수 내에서 수정하고 기본값을 할당할 수도 있습니다.
public class PersonError
{
private List<string> _roles;
public string Name { get; set; }
public int Age { get; set; }
public List<string> Roles
{
get
{
if (_roles == null)
{
throw new Exception("Roles not loaded!");
}
return _roles;
}
set { _roles = value; }
}
public string Title { get; set; }
[OnError]
internal void OnError(StreamingContext context, ErrorContext errorContext)
{
errorContext.Handled = true;
}
}
https://www.newtonsoft.com/json/help/html/SerializationErrorHandling.htm 를 참조해 주세요.
언급URL : https://stackoverflow.com/questions/26107656/ignore-parsing-errors-during-json-net-data-parsing
'programing' 카테고리의 다른 글
AppRegistry.registerComponent 호출 실패 (0) | 2023.02.27 |
---|---|
스프링 부트 응용 프로그램의 기본 로깅 파일 (0) | 2023.02.27 |
각도 JS 및 방향 링크 및 $timeout (0) | 2023.02.27 |
식에서의 Angularjs if-then-else 구조 (0) | 2023.02.22 |
반응 입력 defaultValue가 상태와 함께 업데이트되지 않음 (0) | 2023.02.22 |