Có cách nào để chọn giá trị mặc định của thuộc tính không có trong tệp xml trong quá trình deserialization không?
Nếu thuộc tính mAge
không có trong tệp xml, tôi muốn sử dụng giá trị mặc định là 18. Có thể không?DataContract, mặc định DataMember giá trị
[DataContract]
public class Person
{
public Person()
{
}
[DataMember(Name = "Name")]
public string mName { get; set; }
[DataMember(Name = "Age")]
public int mAge { get; set; }
[DataMember(Name = "Single")]
public bool mIsSingle { get; set; }
};
Chỉnh sửa để đặt câu trả lời.
[DataContract]
public class Person
{
public Person()
{
}
[DataMember(Name = "Name")]
public string mName { get; set; }
[DataMember(Name = "Age")]
public int? mAge { get; set; }
[DataMember(Name = "Single")]
public bool? mIsSingle { get; set; }
[System.Runtime.Serialization.OnDeserialized]
void OnDeserialized(System.Runtime.Serialization.StreamingContext c)
{
mAge = (mAge == null ? 18 : mAge); // 18 is the default value
}
}
Tôi có thể sử dụng câu trả lời của bạn nếu tôi muốn ghi đè giá trị của một đối tượng, bởi vì khi tham chiếu được đặt thành null, tôi biết rằng thuộc tính không có trong tệp xml. Nhưng làm thế nào tôi có thể biết nếu một boolean hoặc một attribut là hiện diện trong tập tin xml? Nếu giá trị cho bolean được đặt thành false hoặc int được đặt thành 0. Tôi không thể phân phối được thừa kế không được gán và attribut được đặt thành giá trị mặc định C#. – BuzBuza
Khi deserilization sẽ cố gắng thiết lập giá trị mặc định cho dữ liệu bị mất trong một cấu trúc nhất định, vì vậy lựa chọn duy nhất của bạn là kiểm tra các giá trị hợp lệ, ví dụ như tôi đã cập nhật câu trả lời và kiểm tra xem age mAge == 0 có đặt giá trị của bạn không. –
Bạn có thể sử dụng các loại nullable để nhận được xung quanh int và null, plz kiểm tra ans cập nhật của tôi –