Heim > Backend-Entwicklung > C++ > Wie überschreibe ich das JsonProperty-Attribut während der JSON-Serialisierung mit Json.NET?

Wie überschreibe ich das JsonProperty-Attribut während der JSON-Serialisierung mit Json.NET?

Linda Hamilton
Freigeben: 2025-01-07 16:06:44
Original
748 Leute haben es durchsucht

How to Override the JsonProperty Attribute During JSON Serialization with Json.NET?

Überschreiben von JsonPropertyAttribute

bei Verwendung von Json.NET für die JSON-Serialisierung

Im Szenario der JSON-Serialisierung mit ASP.Net MVC und Json.Net ist es sehr effektiv, das [JsonProperty(PropertyName = "shortName")]-Attribut zu verwenden, um die Nutzlastgröße zu optimieren. Dieser Ansatz ist nützlich, wenn der Empfänger eine andere .Net-Anwendung oder ein anderer .Net-Dienst ist, da die Deserialisierung die Objekthierarchie unter Verwendung der ursprünglichen Eigenschaftsnamen neu zusammensetzt und gleichzeitig die Nutzlastgröße minimiert.

Allerdings treten Probleme auf, wenn der Client eine JavaScript- oder Ajax-Anwendung ist, auf die über einen Browser zugegriffen wird. Der Client erhält JSON mit verkürzten Eigenschaftsnamen, was eine optimale Nutzung verhindert. In diesem Artikel wird untersucht, wie Sie das Attribut [JsonProperty(PropertyName = "shortName")] während der JSON-Serialisierung programmgesteuert umgehen können.

Zu diesem Zweck ist die Verwendung eines benutzerdefinierten Vertragsparsers die beste Lösung. Hier ist die Umsetzung:

<code class="language-csharp">public class LongNameContractResolver : DefaultContractResolver
{
    protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
    {
        // 使用基类生成具有简短名称的JsonProperty
        IList<JsonProperty> properties = base.CreateProperties(type, memberSerialization);

        // 将简短名称替换为原始属性名称
        foreach (JsonProperty property in properties)
        {
            property.PropertyName = property.UnderlyingName;
        }

        return properties;
    }
}</code>
Nach dem Login kopieren

Durch die Integration eines benutzerdefinierten Parsers können Sie das Serialisierungsverhalten einfach steuern. Seine Wirksamkeit ist wie folgt:

<code class="language-csharp">public class Program
{
    public static void Main(string[] args)
    {
        Foo foo = new Foo
        {
            CustomerName = "Bubba Gump Shrimp Company",
            CustomerNumber = "BG60938"
        };

        Console.WriteLine("--- 使用JsonProperty名称 ---");
        Console.WriteLine(Serialize(foo, false));
        Console.WriteLine();
        Console.WriteLine("--- 忽略JsonProperty名称 ---");
        Console.WriteLine(Serialize(foo, true));
    }

    public static string Serialize(object obj, bool useLongNames)
    {
        JsonSerializerSettings settings = new JsonSerializerSettings();
        settings.Formatting = Formatting.Indented;
        if (useLongNames)
        {
            settings.ContractResolver = new LongNameContractResolver();
        }

        return JsonConvert.SerializeObject(obj, settings);
    }
}</code>
Nach dem Login kopieren

Ausgabe:

<code class="language-json">--- 使用JsonProperty名称 ---
{
  "cust-num": "BG60938",
  "cust-name": "Bubba Gump Shrimp Company"
}

--- 忽略JsonProperty名称 ---
{
  "CustomerNumber": "BG60938",
  "CustomerName": "Bubba Gump Shrimp Company"
}</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie überschreibe ich das JsonProperty-Attribut während der JSON-Serialisierung mit Json.NET?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage