2009-12-07 86 views
6

我想我的输出看起来像这样使用XmlSerializer的添加命名空间没有前缀

<OrderContainer xmlns="http://blabla/api/products" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 

所以我增加了以下我的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); 

但现在我得到

<OrderContainer xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 

那么如何编辑默认名称空间?


我的对象定义是这样的:

[System.Runtime.Serialization.DataContractAttribute(Name="OrderContainer", Namespace="http://blabla/api/products")] 
[System.SerializableAttribute()] 
public partial class OrderContainer 

回答

10

您可以使用XmlSerializer constructor这需要一个默认的命名空间,除了类型要序列:

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); 
0

啊,只好用DataContractSerializer,它会自动生成正确的XML,包括命名空间。

DataContractSerializer dcs = new DataContractSerializer(typeof(OrderContainer)); 
//do stuff.. 
dcs.WriteObject(s, orderContainer); 
2

你必须使用[XmlElementAttribute],不[DataContractAttribute],如果你想使用XML串行。

+0

是的,它只是一些WCF生成的实体;所以他们用'DataContractAttribute'来装饰 –

相关问题