Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.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/0/xml/13.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/4/macos/8.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#_Xml_Xsd - Fatal编程技术网

转换为c#对象时基于字符串的枚举中的值属性

转换为c#对象时基于字符串的枚举中的值属性,c#,xml,xsd,C#,Xml,Xsd,当我在包含以下内容的xsd文件上使用xsd.exe时: <xsd:simpleType name="Primes"> <xsd:restriction base="xsd:string"> <xsd:length value="3"/> <xsd:enumeration value="2" /> <xsd:enumeration value="3" /&g

当我在包含以下内容的xsd文件上使用xsd.exe时:

<xsd:simpleType name="Primes">
        <xsd:restriction base="xsd:string">
            <xsd:length value="3"/>
            <xsd:enumeration value="2" />
            <xsd:enumeration value="3" />
            <xsd:enumeration value="5" />
            <xsd:enumeration value="7" />
            <xsd:enumeration value="11" />
            <xsd:enumeration value="13" />
            <xsd:enumeration value="17" />
        </xsd:restriction>
    </xsd:simpleType>
但当我验证XMl时,它会生成错误消息:

{“实例验证错误:'17'不是有效的素数值。”}

可能是因为她正在等待值“Item17”。那么,我如何选择值17而不是项17呢


仅将项17更改为17是行不通的,这里的问题是您试图为C#
枚举
值使用非法标识符。这是不合法的,也是你这里问题的根源。这里的简单修复方法是使枚举的值在XML和C代码中成为合法的C标识符。例如,在任何地方使用
Item17
,而不是
17
。然后编写一个helper函数,将
enum
值转换为所需的数值

static int GetNumber(Primes p) {
  switch (p) {
    case Primes.Item2: return 2;
    case Primes.Item3: return 3;
    ...
    case Primes.Item17: return 17;
    default: 
      // Handle bad data, probably throw
      throw new ArgumentInvalidException();
  }
}
Ok找到了解决方案:

只需为项目指定一个正确的值:

public enum Primes
{
    [System.Xml.Serialization.XmlEnumAttribute("2")]
    Item2 = 2,
    [System.Xml.Serialization.XmlEnumAttribute("3")]
    Item3 = 3,
    [System.Xml.Serialization.XmlEnumAttribute("5")]
    Item5 = 5,
    [System.Xml.Serialization.XmlEnumAttribute("7")]
    Item7 = 7,
    [System.Xml.Serialization.XmlEnumAttribute("11")]
    Item11 = 11,
    [System.Xml.Serialization.XmlEnumAttribute("13")]
    Item13 = 13,
    [System.Xml.Serialization.XmlEnumAttribute("17")]
    Item17 = 17,
}
我相信他的解决方案更好,因为这样您就可以像使用普通枚举一样使用“客户端”中的枚举。例如:

(Primes)Enum.Parse(typeof(Primes), dbreader["col_enum"].ToString())  

 prints out >> 2 instead of item2

考虑一下,当您使用xsd.exe从xsd创建C#对象时,默认情况下,这是处理xml中整数枚举类型的方式。

感谢您的回答,这可能会起作用—这不是一个好的解决方案。问题是包含一系列存储为字符串的整数的枚举类型。。。。默认情况下会转换为此“Item1”等等…谢谢!默认情况下,xsd工具gust生成[System.Xml.Serialization.XmlEnumAttribute(“2”)]Item2、[System.Xml.Serialization.XmlEnumAttribute(“3”)]Item3分配整数值即可。
(Primes)Enum.Parse(typeof(Primes), dbreader["col_enum"].ToString())  

 prints out >> 2 instead of item2