Heim >Backend-Entwicklung >C++ >Wie kann ich JsonProperty-Attribute für die benutzerdefinierte JSON-Serialisierung in ASP.NET MVC selektiv überschreiben?
JsonProperty-Attribute flexibel steuern, um die benutzerdefinierte JSON-Serialisierung von ASP.NET MVC zu implementieren
In ASP.NET MVC-Anwendungen, die Json.Net verwenden, verwenden Entwickler häufig das Attribut [JsonProperty(PropertyName = "shortName")]
, um die Datenmenge während der JSON-Serialisierung zu reduzieren. Dieser Ansatz funktioniert gut für .NET-Clients, aber browserbasierte Clients werden Probleme mit der Verwendung abgekürzter Eigenschaftsnamen haben.
Um dieses Problem zu lösen, können Sie einen benutzerdefinierten Vertragsparser verwenden, um das [JsonProperty()]
-Attribut während der Serialisierung dynamisch zu ignorieren. So geht's:
Benutzerdefinierter Vertragsparser
<code class="language-csharp">class LongNameContractResolver : DefaultContractResolver { protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization) { var list = base.CreateProperties(type, memberSerialization); foreach (JsonProperty prop in list) { prop.PropertyName = prop.UnderlyingName; } return list; } }</code>
Attributunterdrückung umschalten
Um das [JsonProperty()]
-Attribut während der Serialisierung selektiv zu ignorieren, können Sie das JsonSerializerSettings
-Attribut von ContractResolver
bedingt festlegen. Ein Beispiel ist wie folgt:
<code class="language-csharp">JsonSerializerSettings settings = new JsonSerializerSettings { Formatting = Formatting.Indented }; if (useLongNames) { settings.ContractResolver = new LongNameContractResolver(); } string jsonString = JsonConvert.SerializeObject(obj, settings);</code>
Durch Setzen des Flags useLongNames
können Sie steuern, ob das Attribut [JsonProperty()]
ignoriert wird und längere Attributnamen für die Serialisierung verwendet werden. Dies ermöglicht eine detaillierte Kontrolle der JSON-Ausgabe basierend auf spezifischen Kundenanforderungen.
Beispielausgabe
Betrachten Sie das folgende Beispiel:
<code class="language-csharp">Foo foo = new Foo { CustomerNumber = "BG60938", CustomerName = "Bubba Gump Shrimp Company" }; Console.WriteLine("--- 使用JsonProperty名称 ---"); Console.WriteLine(Serialize(foo, false)); Console.WriteLine(); Console.WriteLine("--- 忽略JsonProperty名称 ---"); Console.WriteLine(Serialize(foo, true));</code>
Ausgabe:
<code>--- 使用JsonProperty名称 --- { "cust-num": "BG60938", "cust-name": "Bubba Gump Shrimp Company" } --- 忽略JsonProperty名称 --- { "CustomerNumber": "BG60938", "CustomerName": "Bubba Gump Shrimp Company" }</code>
Durch dynamisches Überschreiben des [JsonProperty()]
-Attributs können Sie den JSON-Serialisierungsprozess anpassen, um die Datenmenge für einen bestimmten Client zu optimieren und gleichzeitig eine konsistente Objekthierarchie für andere Clients aufrechtzuerhalten.
Das obige ist der detaillierte Inhalt vonWie kann ich JsonProperty-Attribute für die benutzerdefinierte JSON-Serialisierung in ASP.NET MVC selektiv überschreiben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!