簡體   English   中英

使用XmlSerializer添加沒有前綴的命名空間

[英]Use XmlSerializer to add a namespace without a prefix

我希望我的輸出看起來像這樣

<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

除了要序列化的類型之外,您還可以使用XmlSerializer構造函數該構造函數采用默認名稱空間:

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

如果要使用XML Serializer,則必須使用[XmlElementAttribute] ,而不是[DataContractAttribute]

啊,必須使用DataContractSerializer ,它自動生成正確的XML,包括命名空間。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM