我正在尝试在两个单独的类之间传递一个类的实例,如下所示。
//classes
public class A
{
public string name;
public string data;
}
public class B : MarshalByRefObject
{
public A _a;
}
public class C : MarshalByRefObject
{
public A _a;
}
//main program
static void Main(string[] args)
{
B _b = new B();
C _c = new C();
_b._a = new A();
_c._a = _b._a;
}
A和B都存在,我想让C中的A类实例等于B中的A类实例。我基本上想确保B和C都有A的完全相同的副本。
但是,当我尝试运行它时,我得到一个SerializationException,说A类没有标记为Serializable。我知道我以前做过这样的事情并且它从来没有想要它被序列化。为什么它还需要这个呢?我认为这是针对xml序列化的。
我尝试将[Serializable]属性添加到A类,但异常显然已经消失。但是在这样做之后,对B类内部的A进行更改将不会传播到C内部的A实例...就像它们现在是完全独立的副本一样。
有什么想法吗?
编辑:没有意识到这在此之前很重要,但经过一些环顾四周后,我认为确实如此。类B和C继承自MarshalByRefObject类。也许这有助于解决这个问题。我已经更新了上面的课程。
答案 0 :(得分:1)
我最近遇到了类似的问题(确保在反序列化后使用单例盒装的值类型。)
为了解决我的问题,我不得不使用ISerializationSurrogate和SurrogateSelector来修复引用,而不是让它重新装箱。
答案 1 :(得分:0)
我在Visual Studio中运行的代码上没有这样的异常。我根本没有看到任何序列化,你只是在不同的对象上点引用。