WCF序列化列表对象为对象提供奇怪的名称

时间:2011-08-03 14:25:22

标签: wcf serialization

以下是WCF服务中的Method签名:

APIMessageList<APISimpleContact> GetMembers(string apiKey, APIContactSearchFilter filter);


APIMessageList继承自IList。一旦我为这个WCF服务构建了一个代理,类名就是 APIMessageListOfAPISimpleContactjHldnYZV

为什么我没有: APIMessageListOfAPISimpleContact

它将随机文本添加到界面中每个APIMessageList对象的末尾(有几个)它们都以相同的几个字符结尾 - jHldnYZV。我已经在网上寻找可能的原因,但我找不到任何有这个问题的帖子。

这是一个纯粹的化妆品问题,但这个界面暴露给我们的外部客户,所以它的外观很重要。

有人知道我为什么会遇到这个问题吗?

非常感谢 乔

2 个答案:

答案 0 :(得分:7)

您的解决方案将在http://msdn.microsoft.com/en-us/library/ms731045.aspx。基本上,由于您可以拥有多个“SimpleContract”类(在不同的名称空间中),WCF将在合同名称的末尾添加消歧散列,这是您在合同名称末尾的8个字符中所拥有的。但您可以通过使用CollectionDataContract及其Name属性来控制它:

[CollectionDataContract(Name = "APIMessageListOfSimpleContract")]
public class APIMessageList : IList<SimpleContract> { ... }

答案 1 :(得分:0)

我们在使用Generic类型返回值时遇到了类似的问题。如果我们没有指定具体类型,则默认数据协定序列化程序或WCF序列化程序无法推断返回实体的确切类型。因此,它为返回的类型生成一个随机类名。

在我们的项目中,我们通过构建一个特定类型的数据契约来克服这个问题,并且作为WCF操作调用的结果返回相同的内容。

我的猜测是您使用的是泛型类型,并且序列化程序无法推断返回对象的类型。

我建议您创建一个数据传输对象(DTO)并从WCF服务返回该对象。这应该可以解决你的问题。