任何人都知道是否可以仅使用属性来使DataContract序列化使用类中属性类型的隐式强制转换为字符串运算符?
例如:
[DataContract]
public class Root
{
[DataMember]
public Element Member { get; set; }
}
public class Element
{
private string value;
private Element(string value)
{
this.value = value;
}
public static implicit operator string(Element element)
{
return element.value != null ? element.value : "";
}
public static implicit operator Element(string value)
{
if (Something()) return new Element(value);
throw new InvalidCastException()
}
}
(这只是匆忙手写,无视任何编译问题等。)
拉斯 - 埃里克
答案 0 :(得分:3)
有理由不这样做。数据契约应该是简单的跨平台数据传输对象,所以我不会把魔法放在那里。创建一个不可序列化的访问器属性,将基本类型转换为您需要的类型。
答案 1 :(得分:1)
实现这一目标的简单方法(比处理序列化问题更容易)将是这样的:
[DataContract]
public class Root
{
[DataMember]
public string MemberString { get{ return (string)this.Member; } set{this.Member=(Element)value;} }
public Element Member { get; set; }
}