gpt4 book ai didi

c# - wcf 将枚举反序列化为字符串

转载 作者:IT王子 更新时间:2023-10-29 04:39:47 26 4
gpt4 key购买 nike

我正在尝试使用 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"
}

最后抛出异常:

There was an error deserializing the object of type Service.Foo. The value 'bar' cannot be parsed as the type 'Int64'.

我不想切换到使用 XmlSerializer,因为除了它的许多其他缺点之外,它不会让我拥有属性的私有(private) setter。

如何让 WCF(或者说,DataContractSerializer)将我的枚举视为字符串值?

编辑:这样做似乎是不可能的,而且这种行为是设计使然。感谢微软,没有给我们选择,不得不求助于黑客。按照 somori 建议的方式进行操作似乎是使用 JSON 和 WCF 获取字符串枚举的唯一方法。

最佳答案

这可能是个愚蠢的问题。

如果你这样做会发生什么

[DataMember( Name = "foo" )]
private string foo { get; private set; }

public Foo Foo
{
get
{
return Foo.Parse(foo);
}
}

?

关于c# - wcf 将枚举反序列化为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2121010/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com