2012-01-03 63 views
1

我有一個小類,我用[Synchronization]屬性使線程安全,它也實現了ContextBoundObject接口。我想讓這個類[Serializable]。該代碼編譯但我收到一個可序列化和同步

System.Runtime.Remoting.RemotingException: Remoting cannot find field '__identity' on type 'System.MarshalByRefObject' 

異常。我知道用[Synchronization]標記的類是通過一些'遠程'代理來訪問的,但我希望默認的序列化機制能夠工作。

這是一個小應用程序,該類只是一個內存序列(整數id)生成器,所以沒有真正的遠程處理完成。我想我可以通過其他方式同步(鎖定關鍵字),但我想知道什麼是這個問題的標準解決方案。

更新:最後我放棄了[同步]屬性以便使用基本的序列化。

回答

0

標記不應序列化爲[NonSerialized]的任何屬性。

另請看「自定義序列化」。除了標記班級爲[Serializable],你需要實現ISerialiable並添加自定義構造函數,即:

[Serializable] 
public class Foo : ISerializable 
{ 
    // custom deserialization constructor] 
    public Foo(SerializationInfo info , StreamingContext context) 
    { 
    //Get the values from info and assign them to the appropriate properties 
    } 

    public void GetObjectData(SerializationInfo info , StreamingContext context) 
    { 
    // populate info with appropriate key/value pairs. 
    // Don't forget to explicitly serialize/deserialize and contained complex objects/structures 
    } 

}