我正在尝试使用 WCF 使用 RESTful Web 服务。我无法控制 Web 服务的格式,所以我必须在这里和那里做一些变通方法。然而,我似乎无法解决的一个主要问题是如何使 WCF 将枚举反序列化为字符串。
这是我的代码(显然名称已更改):
[DataContract]
public enum Foo
{
[EnumMember( Value = "bar" )]
Bar,
[EnumMember( Value = "baz" )]
Baz
}
[DataContract]
public class UNameIt
{
[DataMember( Name = "id" )]
public long Id { get; private set; }
[DataMember( Name = "name" )]
public string Name { get; private set; }
[DataMember( Name = "foo" )]
public Foo Foo { get; private set; }
}
这是反序列化失败的返回数据:
{
"id":123456,
"name":"John Doe",
"foo":"bar"
}
最后抛出异常:
反序列化 Service.Foo 类型的对象时出错。值“bar”无法解析为类型“Int64”。
我不想切换到使用 XmlSerializer,因为在它的许多其他缺点中,它不会让我在属性上拥有私有设置器。
如何使 WCF(或者,DataContractSerializer)将我的枚举视为字符串值?
编辑:这样做似乎是不可能的,并且行为是设计的方式。感谢微软,没有给我们选择,不得不求助于黑客。按照 somori 建议的方式进行操作似乎是使用 JSON 和 WCF 获取字符串枚举的唯一方法。