json 在API响应中返回的Enum用额外的引号括起来

2guxujil  于 2023-06-07  发布在  其他
关注(0)|答案(1)|浏览(174)

我在启动文件中使用System.Text.Json.Serialization的全局序列化器,如options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());,以使枚举作为字符串值而不是索引值返回。并有几个控制器的行动方法,以检查如何serilizer的工作。

public enum TestEnum
{
    Value1,
    Value111
}

public IActionResult GetEnum()
{
    return Ok(TestEnum.Value1);
}

现在,如果得到GetEnum()的响应(见下文),它将给出“Value1”的响应

public async Task GETEnumValue()
{
    // my client generation code
    var result = client.SendAsync(request).Result;
    var stringResponse = result.Content.ReadAsStringAsync().Result;        
}

不知道为什么stringResponse = ""Value1""在这里附加了额外的引号。如果我返回一个c#模型,它有这个枚举作为属性之一,那么我看不到额外的引号。有什么线索吗??

d6kp6zgx

d6kp6zgx1#

总结:你把你的字符串序列化为JSON,但你从来没有序列化它。

这是发生在细节:
1.我们以字符串Value1开始。
1.然后对这个字符串进行JSON编码,得到"Value1"(这些双引号看起来像C#双引号,但它们是JSON双引号)。
1.然后将结果作为字符串ReadAsStringAsync)而不是JSON读取。因此,您将得到一个包含JSON字符串文字的字符串。
您可以通过将JSON结果读取为JSON来解决此问题。

var stringResponse = result.Content.ReadAsJsonAsync<string>().Result;

...(或手动反序列化结果。)

相关问题