JSON.Net의 [JsonConvert()] 속성에서 StackOverflowException 처리
클래스 직렬화를 평면화하기 위해 JSON.Net 내에서 [JsonConvert()] 속성을 활용하면 StackOverflowException
이 발생할 수 있습니다. 이는 JSON 직렬화 프로세스 중 무한 재귀로 인해 발생합니다.
이를 우회하려면 JsonConverter
메소드를 재정의한 사용자 정의 WriteJson
가 필요합니다. 이 방법은 직렬화 프로세스의 적절한 종료를 보장해야 합니다. 그러나 이 메서드를 생성하는 것은 복잡할 수 있으며 null 허용 유형, 값 유형 및 JSON 변환기 속성을 주의 깊게 처리해야 합니다.
강력한 솔루션에는 순환 재귀를 방지하기 위해 각 속성의 직렬화 유효성을 검사하는 것이 포함됩니다. 다음 코드는 이 접근 방식을 보여줍니다.
<code class="language-csharp">public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { if (ReferenceEquals(value, null)) { writer.WriteNull(); return; } var contract = (JsonObjectContract)serializer .ContractResolver .ResolveContract(value.GetType()); writer.WriteStartObject(); foreach (var property in contract.Properties) { if (property.Ignored) continue; if (!ShouldSerialize(property, value)) continue; var propertyName = property.PropertyName; var propertyValue = property.ValueProvider.GetValue(value); writer.WritePropertyName(propertyName); if (property.Converter != null && property.Converter.CanWrite) { property.Converter.WriteJson(writer, propertyValue, serializer); } else { serializer.Serialize(writer, propertyValue); } } writer.WriteEndObject(); } private static bool ShouldSerialize(JsonProperty property, object instance) { return property.ShouldSerialize == null || property.ShouldSerialize(instance); }</code>
이 코드는 null 값을 확인하고, 무시된 속성을 건너뛰고, 사용자 정의 변환기 내에 ShouldSerialize
논리를 구현하여 올바른 JSON 직렬화를 보장함으로써 예외를 효과적으로 방지합니다.
위 내용은 JSON.Net에서 JsonConvert 속성을 사용할 때 StackOverflowException을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!