JSON.Net: Private und geerbte Felder serialisieren
Die Standardserialisierung von JSON.Net lässt private Felder und solche, die mit [JsonObject(MemberSerialization.OptIn)]
gekennzeichnet sind, aus. In dieser Anleitung wird gezeigt, wie Sie alle Felder, einschließlich privater und von Basisklassen geerbter Felder, mithilfe eines benutzerdefinierten Vertragslösers serialisieren.
Um dies zu erreichen, erstellen Sie ein benutzerdefiniertes ContractResolver
, das die Standardeigenschaftsauflösung überschreibt:
<code class="language-csharp">public class AllFieldsContractResolver : Newtonsoft.Json.Serialization.DefaultContractResolver { protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization) { var props = type.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) .Select(p => base.CreateProperty(p, memberSerialization)) .Union(type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) .Select(f => base.CreateProperty(f, memberSerialization))) .ToList(); props.ForEach(p => { p.Writable = true; p.Readable = true; }); return props; } }</code>
Umsetzung:
Verwenden Sie den benutzerdefinierten Resolver, wenn Sie Ihr Objekt serialisieren:
<code class="language-csharp">var settings = new JsonSerializerSettings { ContractResolver = new AllFieldsContractResolver() }; string json = JsonConvert.SerializeObject(myObject, settings);</code>
Dieser Ansatz gewährleistet eine vollständige Serialisierung, einschließlich privater und geerbter Felder, und sorgt für eine vollständige Datendarstellung in Ihrer JSON-Ausgabe. Denken Sie daran, dass das direkte Offenlegen privater Felder in JSON Auswirkungen auf die Sicherheit oder das Design haben kann. Gehen Sie diese Technik daher mit Bedacht ein.
Das obige ist der detaillierte Inhalt vonWie kann ich private Felder und Unterklassenfelder mit JSON.Net serialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!