【问题标题】:.NET Core 3.0 StringEnumConverter not serializing as string.NET Core 3.0 StringEnumConverter 未序列化为字符串
【发布时间】:2019-10-08 14:14:30
【问题描述】:

在装饰你的枚举时:

[JsonConverter(typeof(StringEnumConverter))]
public EventEntity Entity { get; set; }

并将其序列化为 JsonConvert.SerializeObject(myEvent)

您可能会注意到枚举没有序列化为字符串,而是作为默认整数。

【问题讨论】:

    标签: c# json serialization json.net


    【解决方案1】:

    如果您使用普通的System.Text.Json 而不使用Newtonsoft.JSONStartup.cs 中的这个 sn-p 可能会有所帮助:

    // using System.Text.Json.Serialization
    services.AddControllers()
            .AddJsonOptions(options =>
            {
                options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
            });
    

    这里的关键是 System.Text.Json 中定义的 this 转换器(注意类名与 Newtonsoft.JSON 中的不同):JsonStringEnumConverter

    【讨论】:

      【解决方案2】:

      真的很简单,但让我摸不着头脑 20 分钟左右......

      使用 JsonConverter 属性时,第一个 intellisense 导入是: using System.Text.Json.Serialization

      但您应该改用: using Newtonsoft.Json;

      【讨论】:

      • 注意,试图回答这个问题的人永远不会猜到这一点,这就是为什么在您的问题中提供一个最小的、可重现代码示例非常重要。
      • 这也是我遇到的问题。谢谢!
      • 是的,我也遇到过这个问题。谢谢你的回答。
      【解决方案3】:

      确保添加Microsoft.AspNetCore.Mvc.NewtonsoftJson NuGet 包,并在services.AddMvc(...) 之后的启动ConfigureServices(IServiceCollection services) 方法中调用.AddNewtonsoft()。如果你不这样做,一切都编译得很好,似乎可以运行,但实际上,没有任何东西可以正常工作。

      更多详情here

      【讨论】:

      • 以上所有答案都是正确的,对于 ASP.NET Core 3.0 及更高版本,这是银弹!谢谢@delepster。
      【解决方案4】:

      您必须安装 Newtonsoft.Json 库,在 NuGet 包管理器中找到最新版本,并将其添加到项目中

      using Newtonsoft.Json;
      using Newtonsoft.Json.Converters;
      

      【讨论】:

        【解决方案5】:

        System.Text.Json中,可以用JsonStringEnumConverter代替Newtonsoft.Json.Converters.StringEnumConverter

        services.AddMvc().AddJsonOptions(options =>
        {
           options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
        });
        
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-12
          • 2018-05-08
          • 2020-01-26
          • 1970-01-01
          • 2019-12-26
          • 2021-07-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多