某項目要調用現有的100多個DLL 四 把不能序列化的實體類變成可以序列化的
由于跨域訪問 要求所有的輸入輸出參數 要么是繼承MarshalByRefObject, 要么標記為可序列化
由于這些dll又是其他人開發的 我們沒法修改它們繼承與 MarshalByRefObject , 而且很多類型已經有了繼承了...
那么只好在把類型變成可序列化上做功夫了
以前有寫過一篇文件如何想辦法把不可序列化的類 變為可序列化的
不可序列化的類 聲明如下:
public class InputParameter
{
public string Name;
public int? Type;
public decimal Money { get; set; }
}
話說這個類寫的真是夠爛的..... - -#
只要實現一個它的子類 并實現ISerializable 接口 就可以在需要傳遞InputParameter的地方用它的子類代替它
代碼如下:
public class SerializableParameter : InputParameter, ISerializable
{
public SerializableParameter(SerializationInfo info, StreamingContext context)
{
this.Name = info.GetString("Name");
if (info.GetValue("Type", typeof(Object)) != null)
this.Name = info.GetString("Type");
this.Money = info.GetDecimal("Money");
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("Name", this.Name);
info.AddValue("Type", this.Type);
info.AddValue("Money", this.Money);
}
}
C#里面 接口不能定義構造函數....真是悲劇啊 ,
PS:這個方法還是有一些限制的
1. 父類不能是密封的
2. 父類不能只有私有構造函數 (private 和 protected 構造函數的選擇)
C#里面接口不能定義構造函數...所以這里沒有定義對應的構造函數..會發生運行時錯誤....(BTW C#也不能定義靜態接口.....CLR可以)
對于List<InputParameter>這樣的集合 不能直接用 List<SerializableParameter> 來替代,不過可以構造一個List<InputParameter> 其內部項真實類型是 SerializableParameter
浙公網安備 33010602011771號