首页 / 问答 / C#/.NET/.NET Core应用程序编程开发中如何将枚举序列化成字符串名字而不是数字值?

C#/.NET/.NET Core应用程序编程开发中如何将枚举序列化成字符串名字而不是数字值?

.NET C# 序列化 枚举 .NET Core 669 次浏览
0

在C#/.NET/.NET Core应用程序编程开发中,当前有一个实体类,其中包含了一个枚举属性。当使用Newtonsoft对其实例对象进行序列化后,得到的json字符串中的枚举是数字值而不是枚举的名称,有什么方法可以在进行序列化时将枚举序列化成对应的枚举名称而不是枚举对应的数字值呢?或者是要怎样设置呢?

示例代码如下:

public enum Gender { Male, Female }

public class Person
{
    public int Age { get; set; }
    public Gender Gender { get; set; }
}

序列化后得到的json字符串类似{ "Age": 35, "Gender": 0 },但期望得到的json字符串是这样的{ "Age": 35, "Gender": "Male" }

回复 [×]
提交评论
请输入评论内容

5 个回答

  • 0

    Json.NET提供了StringEnumConverter的属性,你可以在实体类的枚举上设置此属性来标识序列化的枚举转换器,如下:

    或者,你还可以使用一些全局设置来实现,比如:

    1. 如果你想要把这个在序列化时都转换成名称而不是数字值,那么可以在枚举定义时设置StringEnumConverter属性,如下:

    1. 或者,在调用JsonConvert.SerializeObject()方法中作为参数,如下:

    Rector的个人主页

    Rector

    2020-04-22 回答

    • 0

      如果是在ASP.NET MVC或者ASP.NET WEB Api的项目中,你可以在全局配置(global.asax)文件中设置StringEnumConverter,如下:

      或者

      Rector的个人主页

      Rector

      2020-04-22 回答

      • 0

        如果是在ASP.NET Core 2 的项目中,你可以在启动文件(Startup.cs)中设置StringEnumConverter,如下:

        Rector的个人主页

        Rector

        2020-04-22 回答

        • 0

          如果是在.NET Core 3及以上的项目中,你可以在启动文件(Startup.cs)中设置StringEnumConverter,如下:

          Rector的个人主页

          Rector

          2020-04-22 回答

          • 0

            如果在.NET Core 3的项目中,你使用的是微软内置的System.Text.Json,则可以创建一个JsonSerializerOptions的实例,并将这个实例作为JsonSerializer.Serialize<T>()的参数,具体示例代码如下:

            在实体类中设置枚举的转换属性JsonStringEnumConverter,如下:

            如果总是将枚举转换成名称而不是数字,则可以在枚举定义上设置属性JsonStringEnumConverter,如下:

            Rector的个人主页

            Rector

            2020-04-22 回答

            我来回答