C# WCF反序列化返回0个列表元素

C# WCF反序列化返回0个列表元素,c#,wcf,serialization,deserialization,microsoft-sync-framework,C#,Wcf,Serialization,Deserialization,Microsoft Sync Framework,我在反序列化对象时遇到一些问题 我有以下课程: 元数据存储: 问题是: 我使用输出参数将Metadatastore对象从我的服务器(运行wcf服务)传输到我的客户机。因此,我想这个输出参数的序列化/反序列化是由wcf自动完成的。 情况就是这样: 客户端调用该服务: service.GetChangeBatch(out metadatastore_object, otherValue); 服务器响应正确(metadatastore_对象已成功填充并序列化->无错误) 但我在客户端接收到的对象不正

我在反序列化对象时遇到一些问题

我有以下课程:

元数据存储:

问题是: 我使用输出参数将Metadatastore对象从我的服务器(运行wcf服务)传输到我的客户机。因此,我想这个输出参数的序列化/反序列化是由wcf自动完成的。 情况就是这样:

客户端调用该服务:

service.GetChangeBatch(out metadatastore_object, otherValue);
服务器响应正确(metadatastore_对象已成功填充并序列化->无错误)

但我在客户端接收到的对象不正确:文件路径填写正确,但列表数据对象包含零个元素!我还检查了服务器,数据列表包含2个元素。另一件需要注意的奇怪事情是,它不是空的,它只是一个新创建的空列表。 如果有人有这方面的经验,我可以提供更多的代码,如果需要的话。
提前谢谢。欢迎Daan使用
CollectionDataContract
代替
DataContract

这里是msdn关于
CollectionDataContract
的解释: 可能是这一行:

 private List<ItemMetadata> data = new List<ItemMetadata>(); 
私有列表数据=新列表();
这就是清空你的列表


此外,我还将使用DataContract标记ItemMetadata,并使用DataMember标记所有属性。

还应将
ItemMetadata
类修饰为
DataContract
,以便客户端了解该类型以及如何反序列化它。

您还可以在wcf服务上启用详细的消息日志记录,以查看SOAP是什么xml正在从服务器返回

然后,您可以确定客户机是否未正确地将xml反序列化为对象,或者服务器是否未正确地将对象序列化为xml


HTH

就是这样!我还必须将ItemMetadata类修饰为DataContract(如RoccoC5所说),并在客户端和服务器端为它们提供相同的名称空间。谢谢
service.GetChangeBatch(out metadatastore_object, otherValue);
 private List<ItemMetadata> data = new List<ItemMetadata>();