【问题标题】:C# WCF data contract partial class - new field in 2nd partial class not being picked upC# WCF 数据合同部分类 - 未选取第二部分类中的新字段
【发布时间】:2010-12-08 10:59:05
【问题描述】:

我有一个 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 类。

【问题讨论】:

  • [DataContract] 属性放在新属性上然后重新生成代理会发生什么情况?
  • 嗨 slugster - 我尝试了与第一类相同的属性,但出现错误:重复 'WcfSerialization::CollectionDataContract' 属性 C:\xxx\CAEService.DataContracts\SecurityItemCollection.cs
  • 我还尝试将普通的 [DataContract] 属性分配给已编译的第二个类,但在发布服务时出现错误:Type 'CAEService.DataContracts.SecurityItemCollection' with CollectionDataContractAttribute 属性是无效集合类型,因为它具有 DataContractAttribute 属性

标签: wcf partial-classes datacontracts


【解决方案1】:

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

【讨论】:

  • 你确定这两个分部类在同一个命名空间中吗?要验证这一点,请从其中一个类中删除 partial 关键字并编译。如果它没有崩溃,则它们不在同一个命名空间中。
  • 是的,我确定。显然,在标记为 CollectionDataContract 的类中不允许使用数据mambers ...请参阅上面的答案。
【解决方案2】:

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

WCF CollectionDataContract and DataMember

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多