ASP.NET MVC Core 3.0 API Serialize Enums to String

14

Bagaimana cara membuat serialisasi bidang Enum ke String alih-alih Int di ASP.NET MVC Core 3.0? Saya tidak bisa melakukannya dengan cara lama.

services.AddMvc().AddJsonOptions(opts =>
{
    opts.JsonSerializerOptions.Converters.Add(new StringEnumConverter());
})

Saya mendapatkan kesalahan:

tidak dapat mengkonversi dari 'Newtonsoft.Json.Converters.StringEnumConverter' ke 'System.Text.Json.Serialization.JsonConverter'

Andrei
sumber
ASP.NET Core 3.0 tidak termasuk JSON.NET yang berarti Anda harus menambahkan paket secara eksplisit sebelum mencoba kode ini
Panagiotis Kanavos

Jawaban:

28

System.Text.Json serialisasi baru

ASP.NET MVC Core 3.0 menggunakan serialisasi JSON bawaan. Gunakan System.Text.Json.Serialization.JsonStringEnumConverter(dengan awalan "Json"):

services
    .AddMvc()
    // Or .AddControllers(...)
    .AddJsonOptions(opts =>
    {
        opts.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
    })

Info lebih lanjut di sini . Dokumentasi dapat ditemukan di sini .

Jika Anda lebih suka Newtonsoft.Json

Anda juga dapat menggunakan serialisasi Newtonsoft.Json "tradisional":

services
    .AddControllers()
    .AddNewtonsoftJson(opts => opts.Converters.Add(new StringEnumConverter()));
Andrei
sumber
6
Jika Anda memiliki API Web, maka .AddMvc()Anda juga dapat menggunakannya services.AddControllers().AddJsonOptions(...).
Tobias