gpt4 book ai didi

c# - XmlSerializer 的多个 namespace

转载 作者:数据小太阳 更新时间:2023-10-29 02:12:49 26 4
gpt4 key购买 nike

这是场景:

我有嵌套类,然后需要在 xml 文档中序列化

[XmlRoot(Namespace="http://www.foo.bar/myschema")]
public class root
{
[XmlAttribute]
public string version { get; set; }

[XmlElement]
public child child { get; set; }

...
}

[XmlRoot(Namespace="http://www.foo.bar/myschema")]
public class child
{
[XmlElement]
public int elemA { get; set; }

[XmlElement]
public string elemB { get; set; }

...
}

我已经创建了一个基于另一个示例的方法来删除额外的命名空间并设置一个自定义的:

public static void Save<T>(this T type, string path)
{
System.Xml.Serialization.XmlSerializer xs =
new System.Xml.Serialization.XmlSerializer(type.GetType());

System.Xml.Serialization.XmlSerializerNamespaces ns =
new System.Xml.Serialization.XmlSerializerNamespaces();
ns.Add("", "http://www.foo.bar/myschema");

using(XmlWriter file = XmlWriter.Create(path))
{
xs.Serialize(file, type, ns);
}
}

结果我得到了这段代码:

<?xml version="1.0" encoding="utf-8"?>
<root xmlns="http://www.foo.bar/myschema" version="2.00">
<child>
<elemA>1</elemA>
...
</child>
</root>

但预期是这样的:

<?xml version="1.0" encoding="utf-8"?>
<root xmlns="http://www.foo.bar/myschema" version="2.00">
<child xmlns="http://www.foo.bar/myschema">
<elemA>1</elemA>
...
</child>
</root>

我们必须在两个标签中设置自定义命名空间声明。这可能吗?

编辑:

这是一个真实世界的例子:

<?xml version="1.0" encoding="UTF-8"?>
<enviNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.01">
<idLote>200602220000001</idLote>
<NFe xmlns="http://www.portalfiscal.inf.br/nfe">
<infNFe Id="NFe31060243816719000108550000000010001234567890" versao="1.01">
...
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
...
</NFe>
<NFe xmlns="http://www.portalfiscal.inf.br/nfe">
<infNFe Id="NFe31060243816719000108550000000010011234567900" versao="1.01">
...
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
...
</NFe>
<NFe xmlns="http://www.portalfiscal.inf.br/nfe">
<infNFe Id="NFe31060243816719000108550000000010021234567916" versao="1.01">
...
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
...
</NFe>
</enviNFe>

最佳答案

从 XML 的角度来看,您的示例是相同的,因此第一个非常好。如果您必须使用第二个,那么我们的 XML 理解或您的处理管道存在严重问题。

关于c# - XmlSerializer 的多个 namespace ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8232264/

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