Can I make XmlSerializer ignore the namespace (xmlns attribute) on deserialization so that it doesn't matter if the attribute is added or not or even if the attribute is bogus? I know that the source will always be trusted so I don't care about the xmlns attribute.
4 Answers. Show activity on this post. This type is thread safe.
The XmlSerializer creates C# (. cs) files and compiles them into . dll files in the directory named by the TEMP environment variable; serialization occurs with those DLLs. These serialization assemblies can be generated in advance and signed by using the SGen.exe tool.
XmlSerializer enables you to control how objects are encoded into XML. The XmlSerializer enables you to control how objects are encoded into XML, it has a number of constructors.
Yes, you can tell the XmlSerializer to ignore namespaces during de-serialization.
Define an XmlTextReader that ignores namespaces. Like so:
// helper class to ignore namespaces when de-serializing public class NamespaceIgnorantXmlTextReader : XmlTextReader { public NamespaceIgnorantXmlTextReader(System.IO.TextReader reader): base(reader) { } public override string NamespaceURI { get { return ""; } } } // helper class to omit XML decl at start of document when serializing public class XTWFND : XmlTextWriter { public XTWFND (System.IO.TextWriter w) : base(w) { Formatting= System.Xml.Formatting.Indented;} public override void WriteStartDocument () { } }
Here's an example of how you would de-serialize using that TextReader:
public class MyType1 { public string Label { set { _Label= value; } get { return _Label; } } private int _Epoch; public int Epoch { set { _Epoch= value; } get { return _Epoch; } } } String RawXml_WithNamespaces = @" <MyType1 xmlns='urn:booboo-dee-doo'> <Label>This document has namespaces on its elements</Label> <Epoch xmlns='urn:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>0</Epoch> </MyType1>"; System.IO.StringReader sr; sr= new System.IO.StringReader(RawXml_WithNamespaces); var s1 = new XmlSerializer(typeof(MyType1)); var o1= (MyType1) s1.Deserialize(new NamespaceIgnorantXmlTextReader(sr)); System.Console.WriteLine("\n\nDe-serialized, then serialized again:\n"); XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("urn", "booboo-dee-doo"); s1.Serialize(new XTWFND(System.Console.Out), o1, ns); Console.WriteLine("\n\n");
The result is like so:
<MyType1> <Label>This document has namespaces on its elements</Label> <Epoch>0</Epoch> </MyType1>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With