将枚举序列化为从 Azure 函数返回的 JSON 中的字符串

Sys*_*Lol 5 c# json azure json.net azure-functions

有没有办法配置 Azure Functions 如何将对象序列化为 JSON 以获取返回值?我想对枚举值使用字符串而不是整数。

例如,鉴于此代码:-

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

该函数返回:-

{
   "Sauce": 1
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能让它返回下面?

{
   "Sauce": "Hot"
}
Run Code Online (Sandbox Code Playgroud)

我试过返回一个字符串而不是一个对象,但结果包含\"转义符;我想要一个 JSON 结果,而不是一个 JSON 对象的转义字符串表示。

我知道在标准中ASP.NET我可以使用配置来设置序列化选项。这在函数中甚至是可能的,还是应该将所有枚举转换为字符串常量?

Bra*_*ang 2

根据我的测试,我发现Newtonsoft.Json(在创建azure函数项目时安装)的默认版本是10.0.2。通过使用此版本的 Newtonsoft.Json,它将自动用数字替换枚举字符串名称。

这是一个解决方法,我建议您可以打开Nuget Package安装Newtonsoft.Json 9.0.1,然后它就可以正常工作了。

更多详情,您可以参考下图:

在此输入图像描述

结果:

在此输入图像描述