3

我有一个 WCF 服务,其中有一些数据合同。我正在使用 Web 服务软件工厂,它使用设计器创建所有消息和数据以及其他合同,并将它们创建为部分类。重新生成代码时,将重新创建类。

using WcfSerialization = global::System.Runtime.Serialization;

[WcfSerialization::CollectionDataContract(Namespace = "urn:CAEService.DataContracts", ItemName = "SecurityItemCollection")]
public partial class SecurityItemCollection : System.Collections.Generic.List<SecurityItem>
{
}

数据契约是一个工作正常的自定义类的通用列表。但是我现在想为这个类添加一个属性,所以我在同一个命名空间中添加了这个部分类:

public partial class SecurityItemCollection
{
    public int TotalRecords { get; set; }
}

这在服务端似乎工作正常,但是当我编译然后从客户端更新服务引用时,该类没有新属性,即当它序列化它并在客户端重新创建它时,它缺少新的财产。有谁知道这是为什么?

TIA

编辑:好的,这正式让我发疯。我唯一能看到的是它使用的是 CollectionDataContract 属性而不是 DataContract。这是否以某种方式不允许类中的数据成员被序列化?为什么会这样?它在服务端工作正常 - 我可以看到并填充值没问题。但是,当我在客户端上更新服务引用时,什么都没有,只有没有数据成员的 colelction 类。

4

3 回答 3

3

好的,经过大量搜索,我终于发现这是不允许的,即标记为 CollectionDataContract 的类不能有数据成员。为什么会这样,我不知道,但它花了我几个小时和一个头疼的问题。请参阅下面的链接:

WCF CollectionDataContract 和 DataMember

于 2010-12-10T12:12:30.557 回答
3

尝试将 DataMember 属性添加到 TotalRecords 属性

于 2010-12-08T16:51:55.127 回答
2

我知道这是旧的,但是当我搜索这个主题时它不断出现。我可以通过向属性添加“DataMemberAttribute”属性来实现这一点。下面是一个代码示例。

public partial class SecurityItemCollection
{
    [global::System.Runtime.Serialization.DataMemberAttribute()]
    public int TotalRecords { get; set; }

}
于 2011-08-21T03:38:02.887 回答