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

时间:2017-08-04 18:56:59

标签: c# json azure json.net azure-functions

有没有办法配置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中,我可以使用配置来设置序列化选项。这甚至可以在函数中使用,还是应该将我的所有枚举转换为字符串常量?

2 个答案:

答案 0 :(得分:2)

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

这是一个解决方法,我建议你可以打开Nuget Package安装Newtonsoft.Json 9.0.1,然后它会运行良好。

更多细节,您可以参考下图:

enter image description here

结果:

enter image description here

答案 1 :(得分:0)

这让我感到难过,但请检查this answer

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

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