我一直在为我的项目开发 WCF 服务。我的解决方案中有多个项目,如下所述:
服务项目为相应的操作调用Business项目,Business Logic项目初始化Core对象中定义的类的对象。这些对象作为服务调用的响应发送。
这是成功完成的,我能够共享Core项目中定义的类的所有公共属性。但我无法在核心项目中使用DataContract / DataMember属性,因为这是一个非WCF项目。我需要完成一些任务,我必须使用DataMember属性,比如我不想在空值的情况下共享属性,我不想与客户端共享一些对象的一些属性。
如果我误解了这种方法,请告诉我。请帮助我实现上述目标,我在论坛上找不到任何类似的问题。
编辑:(让我尝试更好地解释一下)
所有项目都在WCF服务项目中引用,该项目使用这些项目。这是为了保持逻辑分离。
例如,Core项目包含一个名为User
的类,该类是服务api的返回类型。调用此API时,逻辑会初始化User
的对象。然后该对象返回到该调用。
在这种情况下,我没有使用[DataContract]
类的任何User
属性。它工作正常。现在我想停止分享这个类的一些属性,为此我需要使用[DataContract]/[DataMember]
属性,这些属性在核心项目中没有得到解决。
答案 0 :(得分:3)
好的,让我首先指出数据合同和数据成员与WCF
没有直接关系。实际上,这些属性存在于与服务无直接关系的命名空间中......它们与序列化有关,而只需添加对所需程序集的引用......我认为它是System.Runtime.Serialization
。我不明白为什么你不能在你的项目中添加对这个程序集的引用。
第二个问题涉及“隐藏”成员...我不认为你有很多选择。如果使用DataMember
属性装饰属性,它将使用数据协定进行序列化,因此您无法“隐藏”它。最好的情况是,您可以做的是不使用DataMember
属性修饰属性,但在这种情况下,属性不会被序列化,换句话说,它将在序列化过程中被忽略。