JSON.Net: Private und geerbte Felder serialisieren
Diese Anleitung zeigt, wie Sie komplexe Objekte mithilfe von JSON.Net serialisieren, einschließlich privater Felder und von Unterklassen geerbter Felder. Durch die Serialisierung werden Objekte in ein speicherbares oder übertragbares Format umgewandelt. Für Objekte mit privaten Mitgliedern oder komplexer Vererbung erfordert JSON.Net eine benutzerdefinierte Behandlung.
Die Herausforderung:
Sie haben eine Klassenhierarchie mit Feldern unterschiedlicher Zugänglichkeit (öffentlich, privat, geschützt usw.). Sie müssen alle Felder serialisieren, auch private und solche in Unterklassen, beispielsweise zur Datensicherung.
Die Lösung:
Ein benutzerdefinierter Vertragslöser ermöglicht das Überschreiben des Standard-Serialisierungsverhaltens von JSON.Net. Dieser Resolver erzwingt die Einbeziehung aller Felder, unabhängig von ihren Zugriffsmodifikatoren.
JSON.Net-Implementierung:
<code class="language-csharp">var settings = new JsonSerializerSettings { ContractResolver = new MyContractResolver() }; var json = JsonConvert.SerializeObject(myObject, settings);</code>
Benutzerdefinierter Vertragslöser (MyContractResolver
):
<code class="language-csharp">public class MyContractResolver : 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>
Dieser Resolver untersucht alle Instanzfelder und Eigenschaften (öffentlich und privat) des angegebenen Typs und seiner Basisklassen. Anschließend wird jede Eigenschaft als lesbar und beschreibbar markiert, um eine vollständige Serialisierung sicherzustellen. Beachten Sie, dass die Verwendung dieses Ansatzes zur Serialisierung privater Felder mit Vorsicht erfolgen sollte, insbesondere bei sicherheitsrelevanten Daten.
Das obige ist der detaillierte Inhalt vonWie kann ich private Felder und Unterklassenfelder in JSON.Net serialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!