2013-08-29 22 views
5

Hiện tại, mã bên dưới bỏ qua các thuộc tính rỗng trong quá trình tuần tự hóa. Tôi muốn các thuộc tính có giá trị null trong xml đầu ra là các phần tử rỗng. Tôi đã tìm kiếm trên web nhưng không tìm thấy gì hữu ích. Bất kỳ trợ giúp sẽ được đánh giá cao.Cách bao gồm các thuộc tính rỗng trong tuần tự xml

 var serializer = new XmlSerializer(application.GetType()); 
     var ms = new MemoryStream(); 
     var writer = new StreamWriter(ms); 
     serializer.Serialize(writer, application); 
     return ms; 

Xin lỗi, tôi quên đề cập đến rằng tôi muốn tránh trang trí thuộc tính.

+1

Một vài giá trị nhân bản: [XML serialization và giá trị null - C#] (http://stackoverflow.com/questions/711723/xml-serialization-and -null-value-c-sharp) và [XmlSerializer. Giữ các thuộc tính chuỗi rỗng?] (Http://stackoverflow.com/questions/10733731/xmlserializer-keep-null-string-properties) –

+0

Tại sao bạn muốn làm như vậy? Nó không có ý nghĩa đối với tôi –

+0

Cẩn thận, các phần tử rỗng không _not equatable_ với các phần tử không tồn tại/null. Ví dụ, XML tuần tự hóa một thuộc tính 'string', một phần tử rỗng sẽ tạo ra một chuỗi rỗng' "" '(' String.Empty') cho thuộc tính đó, ở đây là một phần tử không tồn tại (hoặc một phần tử có 'xsi: nil = phần tử "true" 'attribute) sẽ tạo ra một giá trị tham chiếu' null' cho cùng thuộc tính đó. –

Trả lời

7

Bạn có thể kiểm soát các mục phải được sắp xếp theo thứ tự không?
Sử dụng

[XmlElement(IsNullable = true)] 
public string Prop { get; set; } 

bạn có thể đại diện cho nó như <Prop xsi:nil="true" />

0

Bạn có thể sử dụng cũng sử dụng đoạn mã sau. Mô hình là ShouldSerialize{PropertyName}

public class PersonWithNullProperties 
{ 
    public string Name { get; set; } 
    public int? Age { get; set; } 
    public bool ShouldSerializeAge() 
    { 
     return true; 
    } 
} 

    PersonWithNullProperties nullPerson = new PersonWithNullProperties() { Name = "ABCD" }; 
    XmlSerializer xs = new XmlSerializer(typeof(nullPerson)); 
    StringWriter sw = new StringWriter(); 
    xs.Serialize(sw, nullPerson); 

XML

<?xml version="1.0" encoding="utf-16"?> 
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http:// 
www.w3.org/2001/XMLSchema"> 
    <Name>ABCD</Name> 
    <Age xsi:nil="true" /> 
</Person> 
+0

https://msdn.microsoft.com/en-us/library/53b8022e(v=vs.110).aspx – Anand

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