XML 枚举反序列化

本文关键字:反序列化 枚举 XML | 更新日期: 2023-09-27 17:57:12

我有一个从以下XSD生成的C#枚举。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <xsd:element name="mails" type="mailsType" />
 <xsd:complexType name="mailsType">
  <xsd:sequence minOccurs="0" maxOccurs="unbounded">
   <xsd:element name="mail" type="mailType" />
  </xsd:sequence>
 </xsd:complexType>
 <xsd:complexType name="mailType">
  <xsd:sequence>
   <xsd:element name="envelope" type="envelopeType" />
   <xsd:element name="body" type="bodyType" />
   <xsd:element name="attachment" type="attachmentType"
        minOccurs="0" maxOccurs="unbounded" />
  </xsd:sequence>
  <xsd:attribute use="required" name="id" type="xsd:integer" />
 </xsd:complexType>
 <xsd:element name="header">
  <xsd:complexType>
   <xsd:simpleContent>
    <xsd:extension base="xsd:string">
     <xsd:attribute ref="name" use="required" />
    </xsd:extension>
   </xsd:simpleContent>
  </xsd:complexType>
 </xsd:element>
 <xsd:element name="Date" type="xsd:dateTime" />
 <xsd:complexType name="envelopeType">
  <xsd:sequence>
   <xsd:element name="From" type="xsd:string" />
   <xsd:element name="To" type="xsd:string" />
   <xsd:element ref="Date" />
   <xsd:element name="Subject" type="xsd:string" />
   <xsd:element ref="header" minOccurs="0" maxOccurs="unbounded" />
  </xsd:sequence>
  <xsd:attribute name="From" type="xsd:string" use="required" />
 </xsd:complexType>
 <xsd:simpleType name="bodyType">
  <xsd:restriction base="xsd:string" />
 </xsd:simpleType>
 <xsd:complexType name="attachmentType">
  <xsd:group ref="attachmentContent" />
  <xsd:attribute ref="name" use="required" />
 </xsd:complexType>
 <xsd:group name="attachmentContent">
  <xsd:sequence>
   <xsd:element name="mimetype">
    <xsd:complexType>
     <xsd:attributeGroup ref="mimeTypeAttributes" />
    </xsd:complexType>
   </xsd:element>
   <xsd:element name="content" type="xsd:string" minOccurs="0" />
  </xsd:sequence>
 </xsd:group>
 <xsd:attribute name="name" type="xsd:string" />
 <xsd:attributeGroup name="mimeTypeAttributes">
  <xsd:attribute name="type" type="mimeTopLevelType" use="required" />
  <xsd:attribute name="subtype" type="xsd:string" use="required" />
 </xsd:attributeGroup>
 <xsd:simpleType name="mimeTopLevelType">
  <xsd:restriction base="xsd:string">
   <xsd:enumeration value="text" />
   <xsd:enumeration value="multipart" />
   <xsd:enumeration value="application" />
   <xsd:enumeration value="message" />
   <xsd:enumeration value="image" />
   <xsd:enumeration value="audio" />
   <xsd:enumeration value="video" />
  </xsd:restriction>
 </xsd:simpleType>
</xsd:schema>

我有这个 C# 代码:

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
[System.SerializableAttribute()]
public enum mimeTopLevelType {
    /// <remarks/>
    text,
    /// <remarks/>
    multipart,
    /// <remarks/>
    application,
    /// <remarks/>
    message,
    /// <remarks/>
    image,
    /// <remarks/>
    audio,
    /// <remarks/>
    video,
}

我有这个XML(草图):

<mails>
  <mail id="0">
    ...
    <attachment name="signature.doc">
      <mimetype type="application " subtype="msword"/>
      <content>
    ### removed by spamoracle ###
      </content>
    </attachment>
  </mail>
</mails>

当我尝试将此 XML 反序列化为 C# 对象时,出现以下错误:

XML 文档 (14, 17) 中存在错误。

显然,问题是XML具有属性"application"的元素,并且无法将其转换为枚举类型。

有没有人可以提出解决这个问题的方法?

XML 枚举反序列化

难怪 - 你有

type="application " 

而不是

type="application"

请注意属性末尾的空格。