我目前正在使用.NET 6和System.Text.Json进行序列化。当我使用system.text.json或ObjectResult返回响应时,OkObjectResult没有正确地将枚举反序列化为字符串,我遇到了一些问题。
我在模型上使用了以下方法
public class Customer
{
public string? id { get; set; }
public string? Name { get; set; }
public string Address { get; set; }
[JsonConverter(typeof(JsonStringEnumConverter))]
public CustomerType Type {get; set;}
}
using System.Text.Json.Serialization;
[JsonConverter(typeof(JsonStringEnumConverter))]
public enum CustomerType
{
NEW,
EXISTING
}
现在是API代码
public async Task<IActionResult> GetCustomerById(string Id)
{
var results = await _customerService.GetData(Id);
// The results have correct JSON data with enum as string but as soon as I pass this to OkObjectResult, it changes the enum back to int
return new OkObjectResult(results );
}
服务
public async Task<Customer> GetData(string Id)
{
var results = await _httpClient.SendAsync(Id); // Get Data
var jsonResults = await results.Content.ReadAsStringAsync();
var options = new JsonSerializerOptions{ Converters ={
new JsonStringEnumConverter()};
return JsonSerializer.Deserialize<Customer>(jsonResults ,
options ) ; // This returns the data correctly
}
现在,我的问题是为什么OkObjectResult破坏代码并返回整数而不是枚举字符串值。
发布于 2022-10-06 22:36:49
您需要在启动代码中向ASP.NET引入enum转换器,如下所示:
services.AddJsonOptions(options =>
{
var converter = new JsonStringEnumConverter();
options.JsonSerializerOptions.Converters.Add(converter);
});
https://stackoverflow.com/questions/73980433
复制相似问题