0
您會認爲這是一個非常簡單的問題。但經過大量搜索和測試後,我還沒有找到一個漂亮的解決方案。將ValueObject作爲XML序列化
根據域驅動設計,我創建了強類型標識符類。因爲這有助於驗證並且不會意外混合標識符。
所以我做了一個簡單的基類,像這樣:
public abstract class UIDBase<T>
{
private readonly T _id;
protected UIDBase(T id)
{
_id = id;
}
public T ID
{
get { return _id; }
}
// Plus hash/equals implementation
}
而且簡單的實現,像這樣:
public class SensorUID : UIDBase<string>
{
public SensorUID(string id) : base(id)
{
}
}
然後我使用它:
public class SomeObject
{
public SensorUID SensorUID { get; set; }
public FileName FileName { get; set; }
}
但現在當我將它序列化爲XML,我需要一個默認構造函數(煩人)。但更糟糕的是,這些屬性不再被序列化爲屬性。
首選我只想添加自定義Xml序列化代碼到我的UIDBase類。添加屬性或實現一個接口來告訴xml序列化程序這些類應該被序列化爲屬性。就像string/int/long等
如果這些值類型可以做到這一點,爲什麼不是我自己的值類型?
在XML應該是這樣的:
<SomeObject SensorUID="X" FileName="Y"/>
建議你看看[這個MSDN文檔(https://msdn.microsoft .com/en-us/library/83y7df3e(v = vs.110).aspx) – user957902
我會研究它。我也潛入.net源代碼,看看System.string如何將相同的東西關閉。我可以自己回答這個問題;) –
域實體應該是持久的無知。你的實體不是。資源庫的責任是將實體正確地保存到XML(或代表您的域實體的DTO)。 – jgauffin