如何在xml序列化时添加名称空间
问题描述:
StringBuilder sb = new StringBuilder();
XmlWriter writer = XmlWriter.Create(sb);
XmlSerializer serializer = new XmlSerializer(typeof(OpenShipments));
var ns = new XmlSerializerNamespaces();
ns.Add("x-schema:", @"x-schema:C:\UPSLabel\OpenShipments.xdr");
serializer.Serialize(writer, OS, ns);
xmlString = sb.ToString();
获取错误对象引用未找到,因为我以编程方式添加了命名空间。 基本上在我的XML命名空间将类似于下一个如何在xml序列化时添加名称空间
<OpenShipments xmlns="x-schema:C:\UPSLabel\OpenShipments.xdr">
在这里,我添加行ns.Add("x-schema:", @"x-schema:C:\UPSLabel\OpenShipments.xdr");
和上面的一行我得到错误....什么是我的错误。只是无法弄清楚。请帮助我构建命名空间。
答
尝试这样的:
var sb = new StringBuilder();
var myns = @"x-schema:C:\UPSLabel\OpenShipments.xdr";
using (var writer = XmlWriter.Create(sb))
{
var serializer = new XmlSerializer(typeof(OpenShipments), myns);
var ns = new XmlSerializerNamespaces();
ns.Add(string.Empty, myns);
serializer.Serialize(writer, OS, ns);
xmlString = sb.ToString();
}
将产生:
<OpenShipments xmlns="x-schema:C:\UPSLabel\OpenShipments.xdr">
...
</OpenShipments>
答
线:
ns.Add("x-schema:", @"x-schema:C:\UPSLabel\OpenShipments.xdr");
被添加别名,即允许串行器使用x-schema:
的XML内部。但是,这并不会使您的对象使用此名称空间;对于这一点,你需要(在你的类型):
[XmlRoot([email protected]"x-schema:C:\UPSLabel\OpenShipments.xdr")]
public class OpenShipments {...}
(或东西等效,可能使用XmlAttributeOverrides
)
注意与别名添加,您将获得:
<x-schema:OpenShipments xmlns:x-schema="x-schema:C:\UPSLabel\OpenShipments.xdr" />
要得到它没有别名,你想:
ns.Add("", @"x-schema:C:\UPSLabel\OpenShipments.xdr");
这使输出:
<OpenShipments xmlns="x-schema:C:\UPSLabel\OpenShipments.xdr" />
你得到什么错误? – Oded 2011-05-06 06:16:02