Предположим, у вас есть следующий класс:
class Test : ISerializable {
public static Test Instance1 = new Test {
Value1 = "Hello"
,Value2 = 86
};
public static Test Instance2 = new Test {
Value1 = "World"
,Value2 = 26
};
public String Value1 { get; private set; }
public int Value2 { get; private set; }
public void GetObjectData(SerializationInfo info, StreamingContext context) {
//Serialize an indicator of which instance we are - Currently
//I am using the FieldInfo for the static reference.
}
}
Мне было интересно, возможно ли / изящно десериализовать статические экземпляры класса?
Поскольку процедуры десериализации (я использую BinaryFormatter, хотя я бы предположил, что другие будут похожи) ищут конструктор с тем же списком аргументов, что и GetObjectData()
, кажется, что это невозможнонапрямую,То, что я предполагаю, означает, что наиболее элегантным решением было бы на самом деле использовать enum
, а затем предоставить какой-то механизм перевода для преобразования значения перечисления в ссылку на экземпляр.Однако мне лично нравится, что выбор «Enum» напрямую связан с их данными.
Как можно поступить об этом?