Tôi có một lớp, chứa một từ điển tĩnh của tất cả các cá thể hiện có, được định nghĩa tại thời gian biên dịch.C# DataContract Serialization, làm thế nào để deserialize cho trường hợp đã tồn tại
Về cơ bản nó trông như thế này:
[DataContract]
class Foo
{
private static Dictionary<long, Foo> instances = new Dictionary<long, Foo>();
[DataMember]
private long id;
public static readonly Foo A = Create(1);
public static readonly Foo B = Create(2);
public static readonly Foo C = Create(3);
private static Foo Create(long id)
{
Foo instance = new Foo();
instance.id = id;
instances.Add(instance);
return instance;
}
public static Foo Get(long id)
{
return instances[id];
}
}
Có các lĩnh vực khác, và lớp có nguồn gốc, nhưng điều này không quan trọng cho vấn đề.
Chỉ được nối tiếp id
. Khi một thể hiện kiểu này được deserialized, tôi muốn có được thể hiện đã được tạo ra như là trường tĩnh (A
, B
hoặc C
), sử dụng Foo.Get(id)
thay vì nhận một phiên bản mới.
Có cách nào đơn giản để thực hiện việc này không? Tôi không tìm thấy bất kỳ tài nguyên nào mà tôi có thể hiểu được.
Tôi thực sự không muốn lớp sử dụng được quan tâm, bởi vì 'Foo' là một lớp rất trung tâm và sử dụng từ nhiều loại khác. –
Cách triển khai này trông như thế nào? –
vui lòng xem câu trả lời đã chỉnh sửa của tôi – ironic