在DataContract中创建DataMember使用隐式强制转换为字符串运算符

时间:2011-10-26 15:35:21

标签: c# .net wcf datacontractserializer

任何人都知道是否可以仅使用属性来使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()
    }
}

(这只是匆忙手写,无视任何编译问题等。)

拉​​斯 - 埃里克

2 个答案:

答案 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; }
}
相关问题