Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使DataContract中的DataMember使用隐式转换为字符串运算符_C#_.net_Wcf_Datacontractserializer - Fatal编程技术网

C# 使DataContract中的DataMember使用隐式转换为字符串运算符

C# 使DataContract中的DataMember使用隐式转换为字符串运算符,c#,.net,wcf,datacontractserializer,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) { t

有人知道是否可以只使用属性来使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()
    }
}
(这只是仓促手写,不考虑任何编译问题等)


Lars Erik实现这一点的简单方法(比处理序列化问题更简单)如下:

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

    public Element Member { get; set; }
}

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

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

    public Element Member { get; set; }
}

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

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

您试图实现什么?您希望系统如何将字符串反序列化回元素?我希望它使用定义的两个运算符隐式地来回转换它。它可以像拥有一个名为type的DataMember属性一样简单。IE.[DataMember(Type=typeof(string))]您想要实现什么?您希望系统如何将字符串反序列化回元素?我希望它使用定义的两个运算符隐式地来回转换它。它可以像拥有一个名为type的DataMember属性一样简单。我想我必须走那条路,是的。缺点是,我试图从具有枚举的dto反序列化具有域值类型的命令。我想我必须用一个字符串成员把值类型弄得乱七八糟。我想我也会切换到命令上的枚举,让它在执行时转换为值类型。语义元素变成了领域外已知的ElementEnum。我想我必须这样做,是的。缺点是,我试图从具有枚举的dto反序列化具有域值类型的命令。我想我必须用一个字符串成员把值类型弄得乱七八糟。我想我也会切换到命令上的枚举,让它在执行时转换为值类型。Meansion元素成为域外已知的ElementEnum。请参阅下一篇文章中的注释:)请参阅下一篇帖子的评论:)