Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengatasi Atribut JsonProperty Secara Selektif untuk Pensirilan JSON Tersuai dalam ASP.NET MVC?

Bagaimana untuk Mengatasi Atribut JsonProperty Secara Selektif untuk Pensirilan JSON Tersuai dalam ASP.NET MVC?

Linda Hamilton
Linda Hamiltonasal
2025-01-07 15:52:40657semak imbas

How to Selectively Override JsonProperty Attributes for Customized JSON Serialization in ASP.NET MVC?

Kawal atribut JsonProperty secara fleksibel untuk melaksanakan siri JSON tersuai ASP.NET MVC

Dalam aplikasi ASP.NET MVC menggunakan Json.Net, pembangun sering menggunakan atribut [JsonProperty(PropertyName = "shortName")] untuk mengurangkan jumlah data semasa penyirian JSON. Pendekatan ini berfungsi dengan baik untuk pelanggan .NET, tetapi pelanggan berasaskan penyemak imbas akan menghadapi masalah menggunakan nama sifat yang disingkatkan.

Untuk menyelesaikan masalah ini, anda boleh menggunakan penghurai kontrak tersuai untuk mengabaikan atribut [JsonProperty()] secara dinamik semasa penyirian. Begini caranya:

Penghurai kontrak tersuai

<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>

Togol penindasan atribut

Untuk mengabaikan atribut [JsonProperty()] secara terpilih semasa penyirian, anda boleh menetapkan atribut JsonSerializerSettings bagi ContractResolver secara bersyarat. Contohnya adalah seperti berikut:

<code class="language-csharp">JsonSerializerSettings settings = new JsonSerializerSettings
{
    Formatting = Formatting.Indented
};

if (useLongNames)
{
    settings.ContractResolver = new LongNameContractResolver();
}

string jsonString = JsonConvert.SerializeObject(obj, settings);</code>

Dengan menetapkan bendera useLongNames, anda boleh mengawal sama ada atribut [JsonProperty()] diabaikan dan nama atribut yang lebih panjang digunakan untuk bersiri. Ini memberikan kawalan terperinci ke atas output JSON berdasarkan keperluan pelanggan tertentu.

Contoh output

Pertimbangkan contoh berikut:

<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>

Output:

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

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

Dengan mengatasi atribut [JsonProperty()] secara dinamik, anda boleh menyesuaikan proses penyirian JSON untuk mengoptimumkan jumlah data untuk klien tertentu sambil mengekalkan hierarki objek yang konsisten untuk pelanggan lain.

Atas ialah kandungan terperinci Bagaimana untuk Mengatasi Atribut JsonProperty Secara Selektif untuk Pensirilan JSON Tersuai dalam ASP.NET MVC?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn