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

Joe*_*der 6 wcf serialization

这是WCF服务中的Method签名:

APIMessageList<APISimpleContact> GetMembers(string apiKey, APIContactSearchFilter filter);
Run Code Online (Sandbox Code Playgroud)


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

为什么我得不到:APIMessageListOfAPISimpleContact

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

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

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

非常感谢

car*_*ira 7

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

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


Nil*_*ule 0

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

在我们的项目中,我们通过构建特定类型的数据协定克服了这个问题,并返回与 WCF 操作调用结果相同的数据协定。

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

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