使用wsdl生成的WCF代理客户端与ServiceContract,XmlSerializerFormat属性不匹配

时间:2009-11-11 05:11:22

标签: wcf wcf-client


我正在开发.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

2 个答案:

答案 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