2009-12-07 118 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'來裝飾 –

相關問題