使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中的datammember使用隐式强制转换为字符串操作符

不这样做是有原因的。数据契约应该是简单的跨平台数据传输对象,所以我不会在这里使用魔法。创建一个不可序列化的访问器属性,将基本类型转换为所需的类型。

实现这一点的简单方法(比处理序列化问题更容易)是这样的:

[DataContract]
public class Root
{
    [DataMember]
    public string MemberString { get{ return (string)this.Member; } set{this.Member=(Element)value;} }
    public Element Member { get; set; }
}