我正在开发.net 3.5框架中的WCF服务,并使用 basicHttpBiding 在IIS 5.1 windows xp sp3中托管它们。
服务消费客户端在.net 2.0框架中开发。为此,我使用WSDL.EXE生成代理客户端。这个工具生成代理类没有任何问题,但它为每个属性添加的问题增加了额外的属性“[property] Specified”,但是工作正常没有任何问题,只需要指定“为任何属性赋值时指定= true“
若要删除此额外属性,我添加了 XmlSerializerFormat 属性以及 ServiceContract 属性。 WSDL.EXE生成没有额外属性的类,但它排除了之前包含的某些类。
是否需要设置任何属性才能生成排除的类?
注意:所有合同类都归属于 DataContract ,属性归属于 DataMemeber 。
NRK
答案 0 :(得分:3)
XmlSerializer使用XmlIncludeAttribute而不是KnownTypeAttribute
来发现未包含在操作合同中的子类型。所以你可以尝试将它们添加到基类:
[XmlInclude(typeof(ChildClass1))]
[XmlInclude(typeof(ChildClass2))]
public class BaseClass {}
答案 1 :(得分:1)
标准WCF DataContractSerializer将序列化标有[DataMember]
的所有内容 - 无论.NET可见性如何(public / protected / private / internal)。
当您切换到XmlSerializerFormat时,行为会发生变化 - 现在XmlSerializer将序列化public
可见性的所有内容,并且没有标记[XmlIgnore]
。
我会假设您的某些课程和成员未标有public
,因此不再进行序列化。此外,XmlSerializer要求类具有显式的无参数构造函数,该构造函数将用于反序列化 - 您的所有类都具有此功能吗?当然,该构造函数也需要public
。