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

Serialize enum as string in JSON returned from Azure Function

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

例如,给定此代码:-

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");
    }
}

函数returns:-

{
   "Sauce": 1
}

我怎样才能做到return下面的内容?

{
   "Sauce": "Hot"
}

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

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

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

这里有一个解决方法,我建议你可以打开 Nuget 包安装 Newtonsoft.Json 9.0.1,然后就可以正常工作了。

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

结果:

这让我困惑了一段时间,但请检查 this answer

基本上,使用 Json.NET 属性 StringEnumConverter

[JsonConverter(typeof(StringEnumConverter))]
public enum Sauce
{
    [EnumMember(Value = "none")]
    None,
    [EnumMember(Value = "hot")]
    Hot
}