【问题标题】:Serialise an array of enums to their string values in JSON.NET将枚举数组序列化为 JSON.NET 中的字符串值
【发布时间】:2017-06-16 06:01:39
【问题描述】:

我正在开发一个需要返回枚举数组的 API。我将 JSON.NET 与 WebAPI 一起使用,虽然 StringEnumConverter 足以将作为枚举的属性转换为它们的字符串值,但它不会转换只是一个枚举数组的结果,而是只返回整数值。

如果我的端点看起来像这样:

[RoutePrefix("Items")]
public class ItemsController : ApiController
{
    [HttpGet][Route("")]
    public IHttpActionResult Get()
    {
        var items = Enum.GetValues(typeof(Items))
                        .Cast<Items>()
                        .ToList()
        return Ok(items);
    }
}

public enum Items
{
    First = 0,
    Second = 1,
    Third = 2
}

然后对GET /Items 的调用当前返回[ 0, 1, 2 ];我想回复的是[ "First", "Second", "Third" ]

我不想做的是在结果周围加上一个包装器:

public class ItemsList
{
    [JsonProperty("Items", ItemConverterType=typeof(StringEnumConverter))]
    public List<Items> Items { get;set;
}

虽然它在技术上可能有效,但会导致此端点与 API 的其余部分不一致,这不需要包装器围绕其结果。

【问题讨论】:

    标签: serialization json.net asp.net-web-api2


    【解决方案1】:

    尝试将 StringEnumConverter 添加到您的 WebApiConfig 中

    public static void Register(HttpConfiguration config)
    {
           config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new StringEnumConverter());
    
              //...........................................
    }
    

    【讨论】:

    • 我正要说我已经这样做了,然后我想我应该仔细检查一下,瞧,我只是在 RestSharp 客户端上使用它,而不是在 API 本身上使用它。呵呵!
    猜你喜欢
    • 2013-09-09
    • 2012-05-10
    • 2017-08-25
    • 2012-02-27
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    相关资源
    最近更新 更多