Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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# 序列化枚举和添加描述_C#_Wcf - Fatal编程技术网

C# 序列化枚举和添加描述

C# 序列化枚举和添加描述,c#,wcf,C#,Wcf,我有一个这样的枚举: public enum DriveConfig { [Description("4X2")] FOURXTWO=0, [Description("4x4")] FOURXFOUR=1, [Description("6x2")] SIXBYTWO=2, [Description("6x4")] SIXBYFOUR=3 } 在我的系统中,我可以通过以下方式轻松地获得描述: public static st

我有一个这样的枚举:

public enum DriveConfig
{
    [Description("4X2")]
    FOURXTWO=0,

    [Description("4x4")]
    FOURXFOUR=1,

    [Description("6x2")]
    SIXBYTWO=2,

    [Description("6x4")]
    SIXBYFOUR=3

}
在我的系统中,我可以通过以下方式轻松地获得描述:

public static string GetDescriptionFromEnumValue(Enum value)
    {
        DescriptionAttribute attribute = value.GetType()
            .GetField(value.ToString())
            .GetCustomAttributes(typeof(DescriptionAttribute), false)
            .SingleOrDefault() as DescriptionAttribute;
        return attribute == null ? value.ToString() : attribute.Description;
    }
效果非常好

但是现在我需要用webservices扩展系统,所以我正在对我的对象进行dto,并序列化它们。直截了当。但是我如何在另一端包含描述呢

我试过这个

[DataContract]
public enum DriveConfigDto
{
    [Description("4X2")]
    [EnumMember]
    FOURXTWO=0,

    [Description("4x4")]
    [EnumMember]
    FOURXFOUR=1,

    [Description("6x2")]
    [EnumMember]        
    SIXBYTWO=2,

    [Description("6x4")]
    [EnumMember]
    SIXBYFOUR=3
}

但我无法访问另一端的描述

在常见情况下,您不能这样做,因为您的web服务可能有非.NET客户端(因此,它对属性一无所知,因为属性不是合同的一部分)


但是,如果您在客户端受限于.NET,您可以在服务器和客户端之间共享契约程序集。

在常见情况下,您不能这样做,因为您的web服务可能有非.NET客户端(因此,它对属性一无所知,因为属性不是契约的一部分)


但如果您在客户端受到.NET的限制,则可以在服务器和客户端之间共享协定程序集。

这将不起作用,因为这些属性不会自动序列化。

这将不起作用,因为这些属性不会自动序列化。

如果我理解正确,您可以使用EnumMemberAttribute的Value属性:

[DataContract]
public enum DriveConfigDto
{
    [EnumMember(Value="4X2")]
    FOURXTWO=0,

    [EnumMember]
    FOURXFOUR=1,

    [EnumMember]        
    SIXBYTWO=2,
}
生成的XSD如下所示:

<xs:simpleType name="">
<xs:restriction base="xs:string">
<xs:enumeration value="4X2"/>
<xs:enumeration value="FOURXFOUR"/>
<xs:enumeration value="SIXBYTWO"/>
</xs:restriction>
</xs:simpleType>

如果我理解正确,您可以使用EnumMemberAttribute的Value属性:

[DataContract]
public enum DriveConfigDto
{
    [EnumMember(Value="4X2")]
    FOURXTWO=0,

    [EnumMember]
    FOURXFOUR=1,

    [EnumMember]        
    SIXBYTWO=2,
}
生成的XSD如下所示:

<xs:simpleType name="">
<xs:restriction base="xs:string">
<xs:enumeration value="4X2"/>
<xs:enumeration value="FOURXFOUR"/>
<xs:enumeration value="SIXBYTWO"/>
</xs:restriction>
</xs:simpleType>


在添加服务引用之前,您必须引用定义了枚举的组件,并在添加服务引用时将其添加到重用程序集列表。

在添加服务引用之前,您必须引用定义了枚举的组件,并在添加服务引用时将其添加到重用程序集列表中服务参考。

如何“解包”另一侧的枚举?完全正确。这就是问题所在。呵呵,好的。您是如何尝试解压缩枚举的?接收端的枚举是什么样子的?像普通的枚举,减去描述:)那么它就不工作了。新枚举没有description属性。简单到:)如果您真的需要描述,我建议您使用类(或其他东西)而不是枚举。。我不认为枚举被设计成有一个描述..你如何在另一边“解包”枚举?没错。这就是问题所在。呵呵,好的。您是如何尝试解压缩枚举的?接收端的枚举是什么样子的?像普通的枚举,减去描述:)那么它就不工作了。新枚举没有description属性。简单到:)如果您真的需要描述,我建议您使用类(或其他东西)而不是枚举。。我不认为枚举是为了有一个描述而设计的。让我们把任务变得更复杂:
[description(“4x2”)]
让任务变得更复杂:
[description(“4x2”)]
true。现在,客户端实际上在我的控制之下,所以它将在.net中。只需将其视为一种类型:将原始(非序列化)枚举移动到所有项目都可以看到的自己的dll中(原始网站,新的web服务,新的客户端应用程序。然后在客户端从dto转换回domaintrue。现在,客户端实际上在我的控制下,所以它将在.net中。只是作为一种类型考虑:将原始(非序列化)枚举移动到所有项目都可以看到的自己的dll中(原始网站、新的web服务、新的客户端应用程序。然后在客户端将dto转换回域