这是我要处理的有点微妙的问题,并感谢任何帮助。

我们的项目在生产模式下,使用.NET 2.0构建。我们最近开发了2.0解决方案外部的Silverlight应用程序,并且使用WCF服务“说话”。该服务消耗了DLL,我们从2.0解决方案发布文件夹中复制,以便从我们的原始解决方案访问功能。

WCF服务正在公开几种源自我们2.0解决方案的方法和对象。显然,它在内部使用[datacontract] s和[datamember] s,并且在我们的原始解决方案中不可用(因为它是.NET 2.0,并且此时升级到3.5不是一个选项)。幸运的是,WCF能够将我们的序列化对象视为被定义为合同,但是出于某些奇怪的原因,只有会员变量(即使定义为私人!)才被序列化;属性,即使是可设置和公众也永远不会序列化。

我们需要暴露的对象类在它们上定义了[序列化()]。我环顾四周,找不到很好的解决方案 /解释。它可能与.NET 3.0/3.5的方式有关,即“看到”我的2.0对象(它仅在变量上假设[datamember],而从不在属性上)。

我的问题主要是如何仅揭露公共财产,而不是私人变量?

事先感谢您对此的任何见解。

Itamar。

有帮助吗?

解决方案

原因仍然未知。我们通过从暴露的对象(驻留在WCF项目中使用的编译DLL中),然后重新创建所需的属性和辅助功能来绕过此问题。我们还在需要时添加新属性或成员变量。然后,我们在内部使用该新对象(有时需要具有专门的构造函数来进行一些副本或调整)。不理想,但是工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top