【问题标题】:IIS-Hosted WCF REST service - JSON serialize enum as stringIIS 托管的 WCF REST 服务 - JSON 将枚举序列化为字符串
【发布时间】:2018-01-04 04:55:43
【问题描述】:

是否可以将枚举序列化为适当的字符串值或 EnumMember 属性指定的值而不是数字? JSON 序列化似乎忽略了 EnumMember 属性的 Value 属性。如果我将 WebMessageFormat 更改为 Xml,它可以正常工作,但我需要使用 JSON。

我有以下 IIS 托管的 REST 服务

[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json,
    UriTemplate = "test")]
    SomeObject Test();

一些对象:

[DataContract]
public class SomeObject
{
    [DataMember]
    public SomeEnum FooBar
    {
        get;
        set;
    }
}

一些枚举:

[DataContract]
public enum SomeEnum
{
    [EnumMember(Value = "FooValue")]
    [Description("FooDescription")]
    Foo,

    [EnumMember(Value = "BarValue")]
    [Description("BarDescription")]
    Bar,
}

我得到了什么:

{"FooBar":0}

我想获得以下之一(最好是第一个,但任何一个都可以):

{"FooBar": "FooValue"}
{"FooBar": "Foo"}

【问题讨论】:

  • 嘿!您是否能够使用下面建议的方法解决问题?如果不能,您能否更新详细信息和可能的解决方案?如果是,您可以在下面投票和/或将回复标记为 asnwer 吗?

标签: c# json rest wcf enums


【解决方案1】:

您需要参考JSON.NET 在您的属性上使用 StringEnumConverter 属性,如下所示:

using Newtonsoft.Json;
using Newtonsoft.Json.Converters;

[JsonConverter(typeof(StringEnumConverter))]
public SomeEnum FooBar {get;set;}

详情请咨询newtonsoftdocs 希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 2012-02-27
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    相关资源
    最近更新 更多