Giả sử tôi có đối tượng này:Làm thế nào để tạo một kiểu giá trị rỗng với .NET XmlSerializer?
[Serializable]
public class MyClass
{
public int Age { get; set; }
public int MyClassB { get; set; }
}
[Serializable]
public class MyClassB
{
public int RandomNumber { get; set; }
}
XmlSerializer sẽ serialize các đối tượng như thế:
<MyClass>
<Age>0</age>
<MyClassB>
<RandomNumber>4234</RandomNumber>
</MyClassB>
</MyClass>
Làm thế nào tôi có thể làm cho Tuổi nullable bất động sản? IE: không tuần tự hóa thuộc tính Tuổi khi nó dưới 0?
Tôi đã thử với Nullable, nhưng nó serialize đối tượng của tôi như thế:
<MyClass>
<Age d5p1:nil="true" />
<MyClassB>
<RandomNumber>4234</RandomNumber>
</MyClassB>
</MyClass>
Bằng cách đọc các tài liệu MSDN Tôi thấy điều này:
Bạn không thể áp dụng các tài sản IsNullable cho một thành viên đánh máy như một kiểu giá trị vì một kiểu giá trị không thể chứa tham chiếu nullNothingnullptra null (Không có gì trong Visual Basic). Ngoài ra, bạn không thể đặt thuộc tính này thành false cho các loại giá trị rỗng. Khi các kiểu như vậy là tham chiếu nullNothingnullptra null (Không có gì trong Visual Basic), chúng sẽ được tuần tự hóa bằng cách thiết lập xsi: nil thành true.
nguồn: http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlelementattribute.isnullable.aspx
Tôi hiểu một loại giá trị không thể được thiết lập để null. Một valuetype luôn luôn được thiết lập để một cái gì đó. Việc serialization không thể đưa ra quyết định serialize nó hay không dựa trên giá trị hiện tại của nó.
Tôi đã thử với các thuộc tính, nhưng nó không hoạt động. Tôi đã cố gắng tạo ra một đối tượng agecontainer và thao tác nó serialization với các thuộc tính, nhưng nó đã không làm việc ra ngoài.
Những gì tôi thực sự muốn là:
<MyClass>
<MyClassB>
<RandomNumber>4234</RandomNumber>
</MyClassB>
</MyClass>
Khi Tuổi tài sản là dưới 0 (zero).
Có vẻ như bạn sẽ phải triển khai tùy chỉnh tuần tự hóa.
Vâng, đó là những gì tôi mặc dù quá, nhưng tôi muốn tránh xa mà không có nó.
Trong ứng dụng, đối tượng phức tạp hơn nhiều và tôi không muốn xử lý tuần tự.
+1 đó là mẹo nhỏ gọn! Bạn có biết nếu đó là một tính năng không có giấy tờ hoặc nếu nó được hỗ trợ đầy đủ? – James
@James đã ở đó trước khi có thể vô hiệu hóa, vì vậy nó sẽ hoạt động tốt :) Tôi đã sử dụng nó một thời gian trước đây và không gặp phải bất kỳ sự cố nào. – eglasius
Nhưng nó là một tài liệu (và do đó, hỗ trợ) tính năng? –