将枚举序列化为从 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
}
有没有办法配置 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
}