原始帖子:Prevent XmlSerializer from emitting xsi:type on inherited types
我正在处理SOAP,以及包含后代的ClientBase <>和Channel Factory类。在反序列化方面,我有自己的自定义序列化器(通过IXmlSerializable),但这在序列化方面没有帮助。原始请求对象具有给定共享类型的属性。 SOAP服务需要“父母”。但是,由于有许多父类共享属性,所以我创建了Parent,Parent_A,Parent_B等。当我调用ClientBase <>。Channel.DesiredServiceOperation方法时,它将处理该请求,我得到:
<Parent xsi:type="Parent_A"></Parent>
这会中断不知道Parent_A的Web服务。所以我需要删除xsi:type属性。该帖子指示XmlTypeAttribue的使用将导致属性被抑制。因此:
[XmlType("Parent")] public class Parent_A : Parent {}
但是,当我这样做时,在ClientBase <>中,当我尝试调用ChannelFactory.Open()时,出现此错误:
只能为该类型指定XmlRoot属性 MyNamespace.Parent_A。请使用XmlSchemaProviderAttribute指定 模式类型。
因此,我需要另一种方法来控制SOAP ClientBase <>基础结构(如果存在)调用的XmlSerializer。
谢谢 Jaeden“ Sifo Dyas” al'Raec Ruiner