Heim >Backend-Entwicklung >C++ >Wie vermeide ich StackOverflowException, wenn ich das JsonConvert-Attribut zur Klassenreduzierung verwende?
StackOverflowException in JSON.Net mit dem Attribut [JsonConvert] vermeiden
Die Verwendung des [JsonConvert]-Attributs zur Klassenreduzierung in JSON.Net kann manchmal zu einem StackOverflowException
führen. Dies tritt normalerweise auf, wenn der Serialisierungsprozess auf rekursive oder zyklische Referenzen stößt. Die direkte Verwendung von SerializeObject
ohne das Attribut funktioniert jedoch ordnungsgemäß.
Das Problem und die Lösung:
Das Problem ist auf unsachgemäße Handhabung innerhalb der WriteJson
Methode eines benutzerdefinierten JsonConverter
zurückzuführen. Eine robuste WriteJson
-Methode muss mehrere Serialisierungskomplexitäten berücksichtigen:
Hier ist eine verbesserte WriteJson
Methode, die diese Bedenken berücksichtigt:
<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>
Diese verfeinerte WriteJson
Implementierung bietet einen umfassenderen und zuverlässigeren Ansatz zum Reduzieren von Klassen mithilfe der benutzerdefinierten Serialisierung mit dem Attribut [JsonConvert] und verhindert so wirksam StackOverflowException
Fehler.
Das obige ist der detaillierte Inhalt vonWie vermeide ich StackOverflowException, wenn ich das JsonConvert-Attribut zur Klassenreduzierung verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!