2009-12-07 35 views
6

Tôi muốn đầu ra của tôi trông như thế nàySử dụng XmlSerializer để thêm một không gian tên mà không có một tiền tố

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

Vì vậy, tôi thêm vào phần sau đây để XmlSerializer tôi

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

Nhưng bây giờ tôi nhận được

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

Vậy làm cách nào để chỉnh sửa không gian tên mặc định?


định nghĩa đối tượng của tôi là như sau:

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

Trả lời

10

Bạn có thể sử dụng XmlSerializer constructor mà phải mất một namespace mặc định, thêm vào các loại mà bạn muốn 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); 
0

Ah, phải dùng DataContractSerializer, tự động tạo ra XML đúng, bao gồm các không gian tên.

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

Bạn phải sử dụng [XmlElementAttribute], không [DataContractAttribute], nếu bạn muốn sử dụng XML Trình nối tiếp.

+0

Vâng, đó chỉ là một số thực thể do WCF tạo; vì vậy chúng được trang trí với 'DataContractAttribute' –

Các vấn đề liên quan