[JsonConvert] 속성을 사용하여 JSON.Net에서 StackOverflowException 방지
JSON.Net에서 클래스 평면화를 위해 [JsonConvert] 속성을 사용하면 StackOverflowException
이 발생할 수 있습니다. 이는 일반적으로 직렬화 프로세스에서 재귀적 또는 순환적 참조가 발생할 때 발생합니다. 그러나 속성 없이 SerializeObject
을 직접 사용하면 올바르게 작동합니다.
문제 및 해결책:
이 문제는 사용자 정의 WriteJson
의 JsonConverter
방법 내에서의 부적절한 처리로 인해 발생합니다. 강력한 WriteJson
방법은 여러 가지 직렬화 복잡성을 설명해야 합니다.
다음은 이러한 문제를 해결하는 개선된 WriteJson
방법입니다.
<code class="language-csharp">public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { if (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>
이 세련된 WriteJson
구현은 [JsonConvert] 속성이 있는 사용자 정의 직렬화를 사용하여 클래스 평면화에 대한 보다 포괄적이고 안정적인 접근 방식을 제공하여 StackOverflowException
오류를 효과적으로 방지합니다.
위 내용은 클래스 평면화를 위해 JsonConvert 특성을 사용할 때 StackOverflowException을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!