将 WSDL 导入到 Visual Studio 时出现枚举问题

发布于 2024-11-16 03:34:44 字数 1083 浏览 1 评论 0原文

我有一个像这样在 WSDL 中声明的枚举

<xsd:simpleType name="KopRate">
        <xsd:annotation>
          <xsd:documentation>Information</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:string">
          <xsd:enumeration value="0" />
          <xsd:enumeration value="13" />
          <xsd:enumeration value="21" />
          <xsd:enumeration value="56" />
          <xsd:enumeration value="ts" />
          <xsd:enumeration value="kp" />
        </xsd:restriction>
</xsd:simpleType>

问题是 Visual Studio 生成一个像这样的枚举类(添加这个“Item”单词):

namespace TestNmsp
{
    [GeneratedCode("System.Xml", "4.0.30319.1")]
    [XmlType(Namespace = "http://www.kop.com/test/schema")]
    [Serializable]
    public enum KopRate
    {
        [XmlEnum("0")] Item0,
        [XmlEnum("13")] Item13,
        [XmlEnum("21")] Item21,
        [XmlEnum("56")] Item56,
        ts,
        kp,
    }
}

当然,我希望有一个没有这个“Item”部分的枚举。为什么会发生这种情况,我该如何克服?

I have an enumeration declared in WSDL like this

<xsd:simpleType name="KopRate">
        <xsd:annotation>
          <xsd:documentation>Information</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:string">
          <xsd:enumeration value="0" />
          <xsd:enumeration value="13" />
          <xsd:enumeration value="21" />
          <xsd:enumeration value="56" />
          <xsd:enumeration value="ts" />
          <xsd:enumeration value="kp" />
        </xsd:restriction>
</xsd:simpleType>

The problem is Visual Studio generates an enumeration class like this (adding this 'Item' word):

namespace TestNmsp
{
    [GeneratedCode("System.Xml", "4.0.30319.1")]
    [XmlType(Namespace = "http://www.kop.com/test/schema")]
    [Serializable]
    public enum KopRate
    {
        [XmlEnum("0")] Item0,
        [XmlEnum("13")] Item13,
        [XmlEnum("21")] Item21,
        [XmlEnum("56")] Item56,
        ts,
        kp,
    }
}

Of course I would like to have an enumeration without this 'Item' part. Why this is happening and how can I pass that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

禾厶谷欠 2024-11-23 03:34:44

添加 Item 一词的原因如下:

public enum KopRate
{
    0,
    13,
    21,
    56,
    ts,
    kp
} 

对于 C# 语法无效。保持 WSDL 能够反序列化可能值的解决方法是添加字母或其他内容作为前缀。在本例中为“Item”一词。

如果您可以控制 WSDL,建议更改枚举的值以遵守命名约定。

如果您无法控制 WSDL。您始终可以根据需要更改枚举,但保留 XMLEnum 属性,以便让反序列化过程正常工作。

例如:

namespace TestNmsp
{
    [GeneratedCode("System.Xml", "4.0.30319.1")]
    [XmlType(Namespace = "http://www.kop.com/test/schema")]
    [Serializable]
    public enum KopRate
    {
        [XmlEnum("0")] Rate0,
        [XmlEnum("13")] Rate13,
        [XmlEnum("21")] Rate21,
        [XmlEnum("56")] Rate56,
        ts,
        kp,
    }
}

请注意,如果您重新生成代理,您将丢失此更改。

问候,

The reason because the word Item is being added is because the following:

public enum KopRate
{
    0,
    13,
    21,
    56,
    ts,
    kp
} 

Is not valid for C# Syntax. The workaround to keep the WSDL as is an be able to deserialize the possible values is to add a letter or something as a prefix. In this case the "Item" word.

If you have control over the WSDL, It's recommended to change the values of the enumeration in order to respect the naming conventions.

If you do not have control over the WSDL. You can always change the enumeration as you want, but keeping the XMLEnum attribute, in order to let the deserialization process work correctly.

e.g.:

namespace TestNmsp
{
    [GeneratedCode("System.Xml", "4.0.30319.1")]
    [XmlType(Namespace = "http://www.kop.com/test/schema")]
    [Serializable]
    public enum KopRate
    {
        [XmlEnum("0")] Rate0,
        [XmlEnum("13")] Rate13,
        [XmlEnum("21")] Rate21,
        [XmlEnum("56")] Rate56,
        ts,
        kp,
    }
}

Please be aware that if you regenerate the proxy you will lose this change.

Regards,

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文