序列化';这';
本文关键字:序列化 | 更新日期: 2023-09-27 18:28:09
好吧,如果我有这样的类。。。
[serializable]
public class MyClass() : ISerializable
{
public Dictionary<string, object> Values {get; set;}
}
我知道我必须做些什么才能序列化它(对于那些试图找到快速答案的人来说,答案是这样的)。。。
protected MyClass(SerializationInfo info, StreamingContext context)
{
Values = (Dictionary<string, object>)info.GetValue("values", typeof(Dictionary<string, object>));
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("values", Values);
}
我的问题是,如果我想定义一个继承自Dictionary的类,该怎么办?
我走了这么远。。。
[serializable]
public class MyClass() : Dictionary<string, object>, ISerializable
{
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("me", this);
}
}
但后来我迷路了。我不会写这个。。。
protected MyClass(SerializationInfo info, StreamingContext context)
{
this = (MyClass)info.GetValue("me", typeof(MyClass));
}
因为"this"是r/o。那么,我该如何处理呢?我对GetObjectData()的实现是否正确?
我不相信它会有什么不同,但以防万一,我会在.Net 4.0 下写这篇文章
Dictionary<T, V>
已经实现了ISerializable
(请参阅此部分)。所以只需调用基类中的方法:
public class MyClass() : Dictionary<string, object>
{
protected MyClass(SerializationInfo info, StreamingContext context)
: base(info, context) // Call the constructor in Dictionary
{
// instantiate other properties you had added to MyClass.
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
base.GetObjectData(info, context);
// Now add other fields that MyClass implements.
info.AddValue("whatever", this.AnotherProperty);
}
}