相关疑难解决方法(0)

您是否在WCF Web服务中使用枚举类型?

我听说有些人说枚举是邪恶的,不应该在Web服务中使用,因为如果分配了一些值,或者枚举标记了Flags属性,服务器和客户端之间可能会出现不匹配.他们还说,暴露枚举的网络服务难以维护,但实际上并没有给我可行的论据.那么根据您的经验,在WCF Web服务中使用枚举的优缺点是什么?

wcf enums

41
推荐指数
3
解决办法
3万
查看次数

DataContractJsonSerializer和Enums

当我使用DataContractJsonSerializer序列化枚举值时,它序列化枚举的数值,而不是字符串名称.

IE:

enum foo
{
   bar,
   baz
}
Run Code Online (Sandbox Code Playgroud)

序列化foo.bar的值将返回"0",而不是"bar".

相反,我更喜欢它,有没有办法覆盖它?

编辑:

因为我不想更改序列化程序,所以我使用了一个简单的解决方法.

我在类中公开了一个属性来序列化,调用ToString值,即:

// Old
[DataMember]
public EnumType Foo
{
    get { return _foo; }
    set { _foo = value; }
}

// New, I still kept the EnumType but I only serialize the string version

public EnumType Foo
{
    get { return _foo; }
    set { _foo = value; }
}

[DataMember]
public string FooType
{
    get { return _foo.ToString(); }
    private set {}
}
Run Code Online (Sandbox Code Playgroud)

wcf serialization json

39
推荐指数
3
解决办法
2万
查看次数

Json.NET StringEnumConverter并不总是工作

我有一个枚举:

public enum FilterOperator
    {
        [EnumMember(Value = "eq")]
        Equals,
        [EnumMember(Value = "gt")]
        GreaterThan,
        [EnumMember(Value = "lt")]
        LessThan,
        [EnumMember(Value = "in")]
        In,
        [EnumMember(Value = "like")]
        Like
    }
Run Code Online (Sandbox Code Playgroud)

以及包含枚举属性的类:

public class GridFilter
{
    [JsonProperty("operator")]
    [JsonConverter(typeof(StringEnumConverter))]
    public FilterOperator Operator { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

该对象通过WebAPI操作传入,并按预期对“ like”和“ in”进行反序列化,但不适用于“ lg”或“ gt”。知道为什么吗?

更新:好吧,“喜欢”和“从事”工作的原因是它们与枚举名称匹配。将GreaterThan重命名为Gt(etc)是可行的。因此,真正的问题是为什么不使用StringEnumConverter?

c# enums json.net

5
推荐指数
2
解决办法
4662
查看次数

标签 统计

enums ×2

wcf ×2

c# ×1

json ×1

json.net ×1

serialization ×1