Reputation: 27342
I want my output to look like this
<OrderContainer xmlns="http://blabla/api/products" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
So I added the following to my XmlSerializer
XmlSerializer x = new XmlSerializer(typeof(OrderContainer));
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "http://blabla/api/products");
ns.Add("i", "http://www.w3.org/2001/XMLSchema-instance");
// do stuff..
x.Serialize(stream, orderContainer, ns);
But now I get
<OrderContainer xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
So how do I edit the default namespace?
My object definition is like:
[System.Runtime.Serialization.DataContractAttribute(Name="OrderContainer", Namespace="http://blabla/api/products")]
[System.SerializableAttribute()]
public partial class OrderContainer
Upvotes: 6
Views: 8704
Reputation: 161821
You have to use [XmlElementAttribute]
, not [DataContractAttribute]
, if you wish to use the XML Serializer.
Upvotes: 2
Reputation: 1039398
You could use the XmlSerializer constructor which takes a default namespace in addition to the type you want to serialize:
var x = new XmlSerializer(
typeof(OrderContainer),
"http://blabla/api/products");
var ns = new XmlSerializerNamespaces();
ns.Add("i", "http://www.w3.org/2001/XMLSchema-instance");
x.Serialize(stream, orderContainer, ns);
Upvotes: 10
Reputation: 27342
Ah, had to use DataContractSerializer
, which automatically generates correct XML, including the namespaces.
DataContractSerializer dcs = new DataContractSerializer(typeof(OrderContainer));
//do stuff..
dcs.WriteObject(s, orderContainer);
Upvotes: 0