您会认为这是一个非常简单的问题。但经过大量的搜索和测试后,我还没有找到一个漂亮的解决方案。
根据域驱动设计,我创建了强类型标识符类。因为这有助于验证,而不是意外地混淆标识符。
所以我创建了一个简单的基类:
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"/>
答案 0 :(得分:0)
这似乎有效,但感觉很难看:
public class SomeObject
{
[XmlIgnore]
public SensorUID SensorUID { get; set; }
[XmlIgnore]
public FileName FileName { get; set; }
[XmlAttribute("SensorUID")]
public string SensorUIDAsString
{
get { return SensorUID == null ? null : SensorUID.ID; }
set { SensorUID = new SensorUID(value); }
}
[XmlAttribute("FileName")]
public string FileNameAsString
{
get { return FileName == null ? null : FileName.ID; }
set { FileName = new FileName(value); }
}
}