Nói rằng tôi có một vài đối tượng cơ bản như sau:Làm thế nào để tôi deserialize XML mà không biết loại trước?
[Serializable]
public class Base
{
public string Property1 { get; set; }
public int Property2 { get; set; }
}
[Serializable]
public class Sub: Base
{
public List<string> Property3 { get; set; }
public Sub():base()
{
Property3 = new List<string>();
}
}
Và tôi serialize họ như vậy:
Sub s = new Sub {Property1 = "subtest", Property2 = 1000};
s.Property3.Add("item 1");
s.Property3.Add("item 2");
XmlSerializer sFormater = new XmlSerializer(typeof(Sub));
using (FileStream fStream = new FileStream("SubData.xml",
FileMode.Create, FileAccess.Write, FileShare.None))
{
sFormater.Serialize(fStream, s);
}
Làm thế nào tôi có thể deserialize họ, vì vậy mà tôi lấy lại lớp có đúng không?
Như trong, tôi muốn một cái gì đó như thế này
XmlSerializer bFormater = new XmlSerializer(typeof (Base));
Base newBase;
using (FileStream fStream = new FileStream("BaseData.xml",
FileMode.Open, FileAccess.Read, FileShare.Read))
{
newBase = (Base) bFormater.Deserialize(fStream);
}
Trừ tôi có thể vượt qua nó một file XML cho bất kỳ lớp đó xuống từ cơ sở và lớp đúng sẽ được tạo ra.
Tôi nghĩ mình có thể đọc tên của nút gốc của XML và sử dụng câu lệnh chuyển đổi để tạo XmlSerializer chính xác, nhưng tôi đã tự hỏi nếu có một cách đơn giản hơn.
Ok. Mới kiểm tra. Nó ném một ngoại lệ. Đã xóa đoạn cuối cùng. – Kirtan
Ok, đã xóa nhận xét của tôi vì nó không áp dụng nữa. – Ray