gpt4 book ai didi

c# - 向序列化的 XML 元素添加前缀

转载 作者:行者123 更新时间:2023-11-30 13:04:45 25 4
gpt4 key购买 nike

我有以下实现 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 故障详细信息中得到以下 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 实例的属性。

关于c# - 向序列化的 XML 元素添加前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7519289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com