thể trùng lặp:
How to serialize an IList<T>?Làm thế nào để serialize một giao diện như IList <T>
Tôi muốn serialize một lớp (chúng ta hãy gọi nó S
) có chứa một tài sản của các loại IList<T>
trong đó T
là một lớp khác mà tôi đã xác định. Tôi nhận được một ngoại lệ khi tôi cố gắng để tuần tự hóa một thể hiện của lớp S
thành XML. Điều này là dễ hiểu vì XmlSerializer
không biết lớp bê tông nào cần sử dụng. Có cách nào, hy vọng sử dụng các thuộc tính, để xác định lớp bê tông nào để khởi tạo khi tuần tự hóa/deserializing một cá thể. Việc triển khai lớp S
của tôi tạo ra một thể hiện của lớp List<T>
. Dưới đây là một số mã để minh họa cho ví dụ của tôi:
using System;
using System.Xml.Serialization;
using System.IO;
[Serializable]
public class T { }
[Serializable]
public class S
{
public IList<T> ListOfTs { get; set; }
public S()
{
ListOfTs = new List<T>();
}
}
public class Program
{
public void Main()
{
S s = new S();
s.ListOfTs.Add(new T());
s.ListOfTs.Add(new T());
XmlSerializer serializer = new XmlSerializer(typeof(S));
serializer.Serialize(new StringWriter(), s);
}
}
Tôi hy vọng có một thuộc tính tôi có thể đặt phía trên các định nghĩa ListOfTs
nói rằng để serialize, "giả định một thể hiện của List<T>
khi serializing/deserializing".
Tôi sẽ làm điều này, ngoại trừ điều này sẽ thay đổi giao diện cho lớp 'S'. Mặc dù điều này dường như không có tác động thực tế, nhưng từ quan điểm về nguyên tắc, tôi muốn xem liệu có cách nào để giải quyết vấn đề mà không thay đổi loại. –
Giải pháp được đề xuất, mặc dù là giải pháp hoạt động, có thể làm hỏng cấu trúc API công khai của bạn – bashis