[英]Adding prefix to serialized XML element
我有以下類實現IXmlSerializable
:
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Xml.Serialization.XmlSchemaProviderAttribute("ExportSchema")]
[System.Xml.Serialization.XmlRootAttribute(IsNullable = false)]
public partial class ExceptionReport : object, System.Xml.Serialization.IXmlSerializable
{
private System.Xml.XmlNode[] nodesField;
private static System.Xml.XmlQualifiedName typeName = new System.Xml.XmlQualifiedName("ExceptionReport", "http://www.opengis.net/ows");
public System.Xml.XmlNode[] Nodes
{
get
{
return this.nodesField;
}
set
{
this.nodesField = value;
}
}
public void ReadXml(System.Xml.XmlReader reader)
{
this.nodesField = System.Runtime.Serialization.XmlSerializableServices.ReadNodes(reader);
}
public void WriteXml(System.Xml.XmlWriter writer)
{
System.Runtime.Serialization.XmlSerializableServices.WriteNodes(writer, this.Nodes);
}
public System.Xml.Schema.XmlSchema GetSchema()
{
return null;
}
public static System.Xml.XmlQualifiedName ExportSchema(System.Xml.Schema.XmlSchemaSet schemas)
{
System.Runtime.Serialization.XmlSerializableServices.AddDefaultSchema(schemas, typeName);
return typeName;
}
}
當我拋出這樣的錯誤:
throw new FaultException<ExceptionReport>(exceptions.GetExceptionReport(), new FaultReason("A server exception was encountered."), new FaultCode("Receiver"));
我在soap fault詳細信息中獲得以下XML:
...
<detail>
<ExceptionReport xmlns="http://www.opengis.net/ows">
<ows:Exception exceptionCode="NoApplicableCode" locator="somewhere" xmlns:ows="http://www.opengis.net/ows">
<ows:ExceptionText>mymessage</ows:ExceptionText>
</ows:Exception>
</ExceptionReport>
</detail>
...
但我真正想要的是根ExceptionReport元素上的“ows”前綴:
...
<detail>
<ows:ExceptionReport xmlns:ows="http://www.opengis.net/ows">
<ows:Exception exceptionCode="NoApplicableCode" locator="somewhere" xmlns:ows="http://www.opengis.net/ows">
<ows:ExceptionText>mymessage</ows:ExceptionText>
</ows:Exception>
</ows:ExceptionReport>
</detail>
...
我該如何添加該前綴?
如何向ExceptionReport
添加屬性並使用XmlNamespaceDeclarationsAttribute進行裝飾,以及在ExceptionReport
類上設置XmlRoot
屬性的Namespace
屬性,如下所示:
...
[XmlRoot(IsNullable = false, Namespace = "http://www.opengis.net/ows")]
public partial class ExceptionReport
{
[XmlNamespaceDeclarations()]
public XmlSerializerNamespaces xmlns
{
get
{
XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces();
xmlns.Add("ows", "http://www.opengis.net/ows");
return xmlns;
}
set
{
}
}
...
}
當然,您可以在構造函數中或任何您想要的位置填充命名空間,關鍵是要有一個返回正確的XmlSerializerNamespaces
實例的屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.