This is my class:
[XmlRoot(ElementName = "Package")]
public class Package<T>: MyBase
{
public Messages<T> Messages
{
get { return _messages; }
set { _messages = value; OnPropertyChanged(); }
}
private Messages<T> _messages;
}
I'm using this Class for creating multiple xml files. My problem is that one of xml's needs completely different Root namespace than others.
For example, most of xml file uses this namespace:
<Package xmlns="http://www.fsi.de/Schemas/2019/02/PZDIP">
<Messages Id="OS202417483061">
<ID>EDS2</ID>
<Date>2024-04-17</Date>
<Time>08:48:30</Time>
...... //body of xml
</Messages>
</Package>
but one xml file uses different namespace (+ 2 more):
<Package xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.fsi.de/Schemas/2015/32/AAAA">
<Messages Id="202417483061">
<ID>FDGT</ID>
<Date>2024-04-17</Date>
<Time>08:48:30</Time>
...... //body of xml
</Messages>
</Package>
I have tried various things to create dynamic namespace on runtime, but nothing has helped me.
For example, focusing just on this answer here I created code for serializing like this (but no namespaces added to root node at all!):
private string Serialize_to_xml(Package<T> _package, string _xml_type)
{
if (_package == null)
{
return null;
}
try
{
var _namespaces = new XmlSerializerNamespaces();
switch (_xml_type)
{
case "AD":
case "FD":
case "GD":
_namespaces.Add("", "http://www.fsi.de/Schemas/2019/02/PZDIP");
break;
case "LD":
_namespaces.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
_namespaces.Add("xsd", "http://www.w3.org/2001/XMLSchema");
_namespaces.Add("", "http://www.fsi.de/Schemas/2015/32/AAAA");
break;
}
var serializer = new XmlSerializer(_package.GetType());
var ms = new MemoryStream();
var settings = new XmlWriterSettings
{
Encoding = Encoding.GetEncoding("ISO-8859-2"),
Indent = true
};
using (var writer = XmlWriter.Create(ms, settings))
{
serializer.Serialize(writer, _package, _namespaces);
return Encoding.GetEncoding("ISO-8859-2").GetString(ms.ToArray());
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message,"Error");
return null;
}
}
What else can I try?
new XmlSerializer(_package.GetType(), "your_namespace");- just specify desired namespace in the constructor.