我正在試圖找到最佳實踐或一些可接受的設計模式,用於序列化未構建用於序列化的類。下面是我目前實施的方法:使用構造函數從類中序列化數據
例如,考慮一些簡單的類,我想一個構造函數:
public class Coord
{
public int x { get; private set;}
public int y { get; private set;}
public Coord(int x, int y)
{
this.x = x;
this.y = y;
}
}
如果我想序列這一點,我不能沒有露出領域完全公開,並提供無參數的構造函數。
是可以接受的做法是創建一些其他類只是爲了保存值我想連載:
public class DataItem
{
public int x;
public int y;
}
那麼也許有這些類之間的建造方法和負載
public static DataItem saveCoord (Coord c)
{
DataItem result = new DataItem();
result.x = c.x;
result.y = c.y;
return result;
}
public static Coord loadCoord (DataItem di)
{
Coord result = new Coord (di.x, di.y);
return result;
}
那麼我就可以對我的DataItem類執行任何序列化操作。
這種方法可能有哪些批評?有更好的,建立的模式?
對不起,如果我的問題很差,我是一個新鮮的學習者!
你應該看看'ISerializable'接口,https://msdn.microsoft.com/en-us/library/system.runtime.serialization.iserializable(v=vs.110).aspx –
謝謝Jeroen,看起來像一個非常有用的界面。我編輯我的代碼來改進我的問題,也許這個解決方案對我來說更簡單。 – jetimmins
對此沒有通用的解決方案。一些序列化器(例如'DataContractSerializer')支持代理序列化類型。請參閱[Data Contract Surrogates](https://msdn.microsoft.com/en-us/library/ms733064.aspx)。 'XmlSerializer'沒有,但是你可以在包含類型上添加一個surrogate *屬性*,參見[最優雅的xml序列化的Color結構](https://stackoverflow.com/questions/3280362)。或者,您可以[在'Coord'類型上實現'IXmlSerializable'](https://stackoverflow.com/questions/279534)。請注意,'XmlSerialize'不支持'ISerializable'。 – dbc