2010-05-24 46 views
7

Ví dụ tôi có lớp để serializethuộc tính bắt buộc trong XML serialization

[Serializable] 
class Person 
{ 
    [XmlAttribute("name")] 
    string Name {get;set;} 
} 

tôi cần phải thực hiện bắt buộc Tên thuộc tính. Làm thế nào để làm điều này trong .NET?

+0

Ý anh là gì? Chính xác thì bạn muốn làm gì? – SLaks

Trả lời

4

Trước hết, [Serializable] không được sử dụng bởi Trình nối tiếp XML.

Thứ hai, không có cách nào để thực hiện yêu cầu.

-2

Tôi tin rằng bạn đang nhầm lẫn XML với XSD. Nếu bạn muốn thuộc tính của bạn luôn có một giá trị, hãy khởi tạo thuộc tính này trong hàm tạo và ném một ngoại lệ nếu có ai đó cố gắng đặt nó thành rỗng hoặc không.

class Person 
{ 

    private string _Name = "Not Initialized"; 
    [XmlAttribute("name")] 
    string Name { 
    get { return _Name;} 
    set { 
     if(value == null || value==string.Empty) throw new ArgumentException(...); 

     _Name = value; 
    } 
    } 
} 
+0

-1: Lớp người không được tuần tự hóa bởi vì nó không có hàm tạo tham số công khai. Sửa lỗi đó và tôi sẽ loại bỏ phần ghi đè. –

+0

Điều này sẽ không hoạt động. Constructor như vậy sẽ không bao giờ được sử dụng với serialization, do đó, tên setter sẽ không được gọi quá. – darja

3

Bạn có thể sử dụng XmlIgnoreAttribute cùng với mẫu <FieldName>Specified để ném ngoại lệ nếu thuộc tính được để trống hoặc không. Trong quá trình tuần tự hóa, thuộc tính NameSpecified sẽ được kiểm tra để xác định xem trường có nên được hiển thị hay không, vì vậy nếu thuộc tính Tên để trống hoặc để trống một ngoại lệ sẽ được ném.

class Person 
{ 
    [XmlElement("name")] 
    string Name { get; set; } 
    [XmlIgnore] 
    bool NameSpecified 
    { 
     get { 
       if(String.IsNullOrEmpty(Name)) throw new AgrumentException(...); 

       return true; 
      } 
    } 
} 
+0

Đây phải là câu trả lời được chấp nhận. – ajawad987

0

Bạn có thể sử dụng này:

[XmlElement(IsNullable = false)] 
Các vấn đề liên quan