我正在 .net 3.5 框架中开发 WCF 服务,并将它们托管在带有basicHttpBiding的 IIS 5.1 windows xp sp3 中。
使用 .net 2.0 框架开发的服务消费客户端。为此,我使用 WSDL.EXE 生成了代理客户端。此工具生成代理类没有任何问题,但是它为每个属性添加的问题添加了额外的属性"[property]Specified",但是工作正常没有任何问题,只需要在为任何属性赋值时指定"specified = true"
为了删除这个额外的属性,我添加了XmlSerializerFormat属性和ServiceContract属性。WSDL.EXE 生成没有额外属性的类,但它不包括以前包含的某些类。
我需要设置任何属性来生成排除的类吗?
注意:所有合约类都使用DataContract属性,属性使用DataMemeber。
nRk
1762 次
2 回答
3
XmlSerializer 使用XmlIncludeAttribute而不是KnownTypeAttribute
发现未包含在操作协定中的子类型。因此,您可以尝试将它们添加到基类中:
[XmlInclude(typeof(ChildClass1))]
[XmlInclude(typeof(ChildClass2))]
public class BaseClass {}
于 2009-11-11T08:26:30.733 回答
1
标准 WCF DataContractSerializer 将序列化所有标记为[DataMember]
- 无论 .NET 可见性(公共/受保护/私有/内部)如何。
当您切换到 XmlSerializerFormat 时,行为会发生变化 - 现在 XmlSerializer 将序列化具有public
可见性且没有[XmlIgnore]
标记的所有内容。
我会假设你的一些类和成员没有被标记,public
因此不再被序列化。此外,XmlSerializer 要求类具有显式的、无参数的构造函数,该构造函数将用于反序列化 - 您的所有类都有吗?当然,该构造函数也需要是public
.
于 2009-11-11T05:41:53.727 回答