我有一个定义了只读属性的类。在我的代码中,我将其定义为仅具有 getter 的属性。
我希望能够通过网络服务来回发送该对象。当我在服务中调用“Get”方法时,它将在服务端填充一个值。定义此属性后,我不希望 Web 服务的使用者能够设置/更改此属性。
当我向项目添加对此 Web 服务的引用时,该对象的属性以几种不同的方式序列化,具体取决于我尝试在服务端定义对象的方式:
-
内部二传手:在 WSDL 中创建属性。 Visual Studio 会为此属性生成一个具有 getter 和 setter 的类。
-
没有二传手:不在 WSDL 中创建属性。 Visual Studio 显然根本没有定义这个属性。
-
只读公共成员变量- 不在 WSDL 中创建属性。同样,Visual Studio 不会对此属性执行任何操作,因为它不知道该属性。
允许 Web 服务的使用者为此属性设置值不会造成任何损害。如果设置了该值,则 Web 服务端会忽略该值。我只是希望消费者无法更改/设置属性来开始。
有什么方法可以将属性定义为只读吗?现在,我们正在使用 C#/.NET 2.0 作为 Web 服务,并且(至少现在)我们可以控制该服务的所有使用者,因此我可以根据需要尝试更改配置,但我更愿意只更改网络服务上的东西而不是消费者。
我可能是错的,但我认为这里的问题是序列化的工作原理 - 为了反序列化一个对象,序列化程序创建一个空对象,然后设置该对象上的所有属性 - 这就是为什么你需要一个设置器来包含属性在序列化中。客户端代码与反序列化器具有相同的对象“接口”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)