我在启动文件中使用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#模型,它有这个枚举作为属性之一,那么我看不到额外的引号。有什么线索吗??
1条答案
按热度按时间d6kp6zgx1#
总结:你把你的字符串序列化为JSON,但你从来没有反序列化它。
这是发生在细节:
1.我们以字符串
Value1
开始。1.然后对这个字符串进行JSON编码,得到
"Value1"
(这些双引号看起来像C#双引号,但它们是JSON双引号)。1.然后将结果作为字符串(
ReadAsStringAsync
)而不是JSON读取。因此,您将得到一个包含JSON字符串文字的字符串。您可以通过将JSON结果读取为JSON来解决此问题。
...(或手动反序列化结果。)