gpt4 book ai didi

c# - 序列化 'this'

转载 作者:太空宇宙 更新时间:2023-11-03 19:24:36 25 4
gpt4 key购买 nike

好吧,如果我有这样的类(class)......

[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));
}

'因为'这个'是r/o。那么,我将如何进行?我对 GetObjectData() 的实现是否正确?

我不相信它会有所作为,但为了以防万一,我在 .Net 4.0 下写这篇文章

最佳答案

Dictionary<T, V>已经实现 ISerializable (参见 this)。所以只需调用基类中的方法:

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);
}
}

关于c# - 序列化 'this',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9729848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com