假设您有以下课程:
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”的选择与他们的数据直接相关。
怎么会这样呢?
答案 0 :(得分:5)
如果您需要使用Enums提供更多数据,请考虑使用属性。示例如下。
class Name : Attribute
{
public string Text;
public Name(string text)
{
this.Text = text;
}
}
class Description : Attribute
{
public string Text;
public Description(string text)
{
this.Text = text;
}
}
public enum DaysOfWeek
{
[Name("FirstDayOfWeek")]
[Description("This is the first day of 7 days")]
Sunday = 1,
[Name("SecondDayOfWeek")]
[Description("This is the second day of 7 days")]
Monday= 2,
[Name("FirstDayOfWeek")]
[Description("This is the Third day of 7 days")]
Tuesday= 3,
}
也许这将允许您使用Enums提供更多信息。您可以通过反射访问属性。如果你需要一个例子来检索我可以提供的属性,但我试图保持这个有点短。
答案 1 :(得分:0)
使用Enum.Parse ...假设您有以下内容:
Enum myEnum{ Foo = 1, Bar = 2, Baz = 3 };
然后
myEnum myE = myEnum.Foo; /* Default! */ myE = (myEnum)Enum.Parse(myE.GetType(), "Baz"); /* Now, myE should be Baz! */ Console.WriteLine("Enum Selected: {0}", myE.ToString());
上面的示例用于说明如何将字符串文字转换为枚举。我希望这就是你要找的东西。