DataContract在WCF以外的项目中

时间:2013-12-31 08:28:57

标签: c# wcf datacontract n-tier-architecture

我一直在为我的项目开发 WCF 服务。我的解决方案中有多个项目,如下所述:

  1. WCF服务 - WCF服务项目
  2. 业务逻辑 - 项目包含域逻辑
  3. 数据访问层 - 用于访问数据
  4. 核心 - 项目仅包含业务对象(其中许多是作为服务调用的响应发送的 - 其中包含要与客户共享的类)
  5. 记录 - 项目以记录错误和活动
  6. 服务项目为相应的操作调用Business项目,Business Logic项目初始化Core对象中定义的类的对象。这些对象作为服务调用的响应发送。

    这是成功完成的,我能够共享Core项目中定义的类的所有公共属性。但我无法在核心项目中使用DataContract / DataMember属性,因为这是一个非WCF项目。我需要完成一些任务,我必须使用DataMember属性,比如我不想在空值的情况下共享属性,我不想与客户端共享一些对象的一些属性。

    如果我误解了这种方法,请告诉我。请帮助我实现上述目标,我在论坛上找不到任何类似的问题。

    编辑:(让我尝试更好地解释一下)

    所有项目都在WCF服务项目中引用,该项目使用这些项目。这是为了保持逻辑分离。

    例如,Core项目包含一个名为User的类,该类是服务api的返回类型。调用此API时,逻辑会初始化User的对象。然后该对象返回到该调用。

    在这种情况下,我没有使用[DataContract]类的任何User属性。它工作正常。现在我想停止分享这个类的一些属性,为此我需要使用[DataContract]/[DataMember]属性,这些属性在核心项目中没有得到解决。

1 个答案:

答案 0 :(得分:3)

好的,让我首先指出数据合同和数据成员与WCF没有直接关系。实际上,这些属性存在于与服务无直接关系的命名空间中......它们与序列化有关,而只需添加对所需程序集的引用......我认为它是System.Runtime.Serialization。我不明白为什么你不能在你的项目中添加对这个程序集的引用。

第二个问题涉及“隐藏”成员...我不认为你有很多选择。如果使用DataMember属性装饰属性,它将使用数据协定进行序列化,因此您无法“隐藏”它。最好的情况是,您可以做的是不使用DataMember属性修饰属性,但在这种情况下,属性不会被序列化,换句话说,它将在序列化过程中被忽略。