有没有办法配置Azure Functions如何将对象序列化为JSON以获取返回值?我想使用字符串而不是int来表示枚举值。
例如,鉴于此代码: -
public enum Sauce
{
None,
Hot
}
public class Dish
{
[JsonConverter(typeof(StringEnumConverter))]
public Sauce Sauce;
}
public static class MyFunction
{
[FunctionName("MakeDinner")]
public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log)
{
var dish = new Dish() { Sauce = Sauce.Hot };
return req.CreateResponse(HttpStatusCode.OK, dish, "application/json");
}
}
该函数返回: -
{
"Sauce": 1
}
如何让它返回下方?
{
"Sauce": "Hot"
}
我尝试过返回字符串而不是对象,但结果包含\"
个转义符;我想要一个JSON结果,而不是JSON对象的转义字符串表示。
我知道在标准ASP.NET
中,我可以使用配置来设置序列化选项。这甚至可以在函数中使用,还是应该将我的所有枚举转换为字符串常量?
答案 0 :(得分:2)
根据我的测试,我发现Newtonsoft.Json的默认版本(在创建azure函数项目时安装)是10.0.2。通过使用此版本的Newtonsoft.Json,它将使用数字自动替换枚举字符串名称。
这是一个解决方法,我建议你可以打开Nuget Package安装Newtonsoft.Json 9.0.1,然后它会运行良好。
更多细节,您可以参考下图:
结果:
答案 1 :(得分:0)
这让我感到难过,但请检查this answer。
基本上,使用Json.NET属性StringEnumConverter
。
[JsonConverter(typeof(StringEnumConverter))]
public enum Sauce
{
[EnumMember(Value = "none")]
None,
[EnumMember(Value = "hot")]
Hot
}