使DataContract中的datammember使用隐式强制转换为字符串操作符
本文关键字:转换 操作符 字符串 DataContract 中的 datammember | 更新日期: 2023-09-27 18:12:23
有人知道是否可以使用属性仅使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()
}
}
(这只是手写的匆忙,忽略任何编译问题等)
拉尔斯·
不这样做是有原因的。数据契约应该是简单的跨平台数据传输对象,所以我不会在这里使用魔法。创建一个不可序列化的访问器属性,将基本类型转换为所需的类型。
实现这一点的简单方法(比处理序列化问题更容易)是这样的:
[DataContract]
public class Root
{
[DataMember]
public string MemberString { get{ return (string)this.Member; } set{this.Member=(Element)value;} }
public Element Member { get; set; }
}