2010-03-23 37 views
16

Tôi đang cố tạo một tài liệu XML có chứa không gian tên mặc định mà không cần tiền tố sử dụng XmlSerializer, ví dụ:Làm cách nào để thêm không gian tên mặc định không có tiền tố bằng cách sử dụng XMLSerializer

<?xml version="1.0" encoding="utf-8" ?> 
<MyRecord ID="9266" xmlns="http://www.website.com/MyRecord"> 
    <List> 
     <SpecificItem> 

Sử dụng đoạn mã sau ...

string xmlizedString = null; 
MemoryStream memoryStream = new MemoryStream(); 
XmlSerializer xs = new XmlSerializer(typeof(ExportMyRecord)); 
XmlSerializerNamespaces xmlnsEmpty = new XmlSerializerNamespaces(); 
xmlnsEmpty.Add(string.Empty, string.Empty); 
XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8); 
xs.Serialize(xmlTextWriter, myRecord, xmlnsEmpty); 
memoryStream = (MemoryStream)xmlTextWriter.BaseStream; 
xmlizedString = this.UTF8ByteArrayToString(memoryStream.ToArray()); 

và cấu trúc lớp ...

[Serializable] 
[XmlRoot("MyRecord")] 
public class ExportMyRecord 
{ 
    [XmlAttribute("ID")] 
    public int ID { get; set; } 

Bây giờ, tôi đã cố gắng tùy chọn khác nhau ...

XmlSerializer xs = new XmlSerializer 
        (typeof(ExportMyRecord),"http://www.website.com/MyRecord"); 

hoặc ...

[XmlRoot(Namespace = "http://www.website.com/MyRecord", ElementName="MyRecord")] 

mang lại cho tôi ...

<?xml version="1.0" encoding="utf-8"?> 
<q1:MylRecord ID="9266" xmlns:q1="http://www.website.com/MyRecord"> 
    <q1:List> 
     <q1:SpecificItem> 

Tôi cần XML để có không gian tên mà không có tiền tố như nó sẽ một nhà cung cấp bên thứ ba và họ từ chối tất cả các lựa chọn thay thế khác.

Trả lời

29

Có bạn đi:

ExportMyRecord instance = GetInstanceToSerializeFromSomewhere(); 
XmlSerializerNamespaces xmlnsEmpty = new XmlSerializerNamespaces(); 
xmlnsEmpty.Add(string.Empty, "http://www.website.com/MyRecord"); 
var serializer = new XmlSerializer(
    instance.GetType(), 
    "http://www.website.com/MyRecord" 
); 
+0

giải pháp hoàn hảo! – viperguynaz

+0

chỉ muốn lưu ý rằng bạn không sử dụng xmlnsEmpty và có thể bỏ qua. Quá tải của serialize mà có XmlSerializerNamespaces dường như không sử dụng giá trị string.empty. – arviman

+0

Brilliant! cũng có vấn đề với ' Eon

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