IIS托管的WCF REST服务 - JSON将枚举序列化为字符串

时间:2017-07-28 08:05:46

标签: c# json rest wcf enums

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

我有以下IIS托管的REST服务

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

SomeObject:

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

SomeEnum:

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

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

我得到了什么:

{"FooBar":0}

我想获得以下其中一项(最好是第一项,但其中一项有效):

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

1 个答案:

答案 0 :(得分:0)

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

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

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

有关详细信息,请参阅newtonsoft docs 希望这有帮助!