This is the scenario:
I have nested classes and need to serialize then in an XML document
[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; } ... }
I created a method based on another example to remove additional namespaces and set up a custom one:
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); } }
And I get this code as a result:
<?xml version="1.0" encoding="utf-8"?> <root xmlns="http://www.foo.bar/myschema" version="2.00"> <child> <elemA>1</elemA> ... </child> </root>
But expected this:
<?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>
We must set the declaration of the user namespace in both tags. Is it possible?
Edit:
Here is an example of the real world:
<?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>
source share