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