这是我正在处理的一个微妙的问题,并希望得到任何帮助。
我们的项目采用.NET 2.0构建的生产模式。我们最近开发了2.0解决方案外部的Silverlight应用程序,它与WCF服务“对话”。此服务使用我们从2.0解决方案发布文件夹中复制的DLL,以便从我们的原始解决方案中访问功能。
WCF服务公开了源自2.0解决方案的多个方法和对象。显然,它在内部使用[DataContract]和[DataMember],而这些在我们的原始解决方案中不可用(因为它是.NET 2.0,此时升级到3.5不是一个选项)。幸运的是,WCF能够将我们的可序列化对象视为已定义为契约,但由于某些奇怪的原因,只有成员变量(即使定义为private!)被序列化;属性,甚至可设置和公共从未被序列化。
我们需要公开的对象类在它们上定义了[Serializable()]。我环顾四周,找不到一个好的解决方案/解释。它可能与.NET 3.0 / 3.5如何“看到”我的2.0对象有关(它假定[DataMember]仅对变量而不是属性)。
我的问题主要是如何只暴露公共属性,而不是私有变量?
提前感谢您对此有任何见解。
伊塔马尔。
答案 0 :(得分:0)
原因仍然未知。我们通过从暴露的对象(驻留在我们通过WCF项目使用的已编译的DLL中)派生,然后重新创建我们需要的属性和辅助函数来绕过这个问题。我们还在需要时添加新属性或成员变量。然后我们在内部使用该新对象(这有时需要一个专门的构造函数来进行一些复制或调整)。不理想,但工作。