如何解决.NET 4.8 - WCF 复杂架构 - 使用 XmlSerializer 将派生类型呈现为基础
由于继承,我在使用具有复杂架构的 SOAP 服务时遇到了重大问题
我有一个基本类型 ProcessMessage
[System.Xml.Serialization.XmlIncludeAttribute(typeof(ProcessCustomerMessage))]
[System.CodeDom.Compiler.GeneratedCodeAttribute("svcutil","4.8.3928.0")]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public abstract class ProcessMessage
{
}
然后我有多个派生类型,例如继承基类的 ProcessCustomerMessage
ProcessRepairMessage
。
问题是我需要将派生类型呈现为基础,以便服务接受它
我遵循了我能做的文档,并在需要的地方添加了 XmlInclude
和 XmlType
...
/// <remarks/>
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlType(TypeName = "ProcessMessage",AnonymousType = true,Namespace = "http://www.mynamespace.org")]
public class ProcessCustomerMessage: ProcessMessage {
private ProcessCustomerInformationPayload payloadField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Order = 0)]
public ProcessCustomerInformationPayload payload {
get {
return this.payloadField;
}
set {
this.payloadField = value;
}
}
}
上面的代码将正确序列化,但服务拒绝它并出现以下错误
Unknown type {tran:ProcessMessage} specified in xsi:type attribute
这是因为 Xml 中的 xsi:type="tran:ProcessMessage"
<tran:ProcessMessage xsi:type="tran:ProcessMessage" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
我看不到如何从 Xml 中删除此 xsi:type
我使用的是 XmlSerializer 而不是 DCS,因为架构非常复杂,DCS 不支持,我也无法控制架构作为其第 3 方服务。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。