2009-01-10 56 views
0

我試圖在兩個獨立的類之間傳遞一個類的實例,如下所示。將一個類的實例設置爲另一個類時的SerializationException

//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類的實例,它是用C等於A類的那個實例,它是在我B.基本上要確保兩個B和C具有相同的完全相同的副本A.

但是,當我嘗試運行此操作時,出現SerializationException,表示類A未標記爲Serializable。我知道我以前做過這樣的事情,並且不希望它被序列化。爲什麼它需要這個呢?我認爲這是爲了xml序列化。

我曾嘗試向類A添加[Serializable]屬性,並且異常顯然消失了。但是做完這些之後,對B類內部的A進行更改將不會傳播到C內部的A實例中,就像它們現在完全獨立的副本一樣。

任何想法?

編輯:沒有意識到這會在以前,但一些環顧四周後,我認爲它確實。 B和C類從MarshalByRefObject類繼承。也許這將有助於弄清楚。我已經更新了上面的類。

回答

1

我最近有一個類似的問題(確保反序列化後的單身boxedvalueType)。

要解決我的問題,我不得不使用ISerializationSurrogate和SurrogateSelector來修復引用,而不是讓它重新裝箱。

0

在Visual Studio中運行上面的代碼時,我沒有得到這樣的異常。我根本沒有發現任何序列化,你只是在不同的對象上指向引用。

+0

這不是我正在使用的實際代碼......它是一個很大的簡化...它必須有別的事情...... – 2009-01-10 21:41:35

相關問題