C# 自定义XSD类型的Xml序列化

C# 自定义XSD类型的Xml序列化,c#,.net,xml,xml-serialization,C#,.net,Xml,Xml Serialization,我有一个C#级成员,像这样: class Case { string ID; string JurisdictionID; } 相应的XSD如下所示: <xs:element name="CaseTrackingID" type="IDType"/> <xs:complexType name="IDType"> <xs:sequence> <xs:element name="ID" type="xs:string"/>

我有一个C#级成员,像这样:

class Case
{
  string ID;
  string JurisdictionID;
}
相应的XSD如下所示:

<xs:element name="CaseTrackingID" type="IDType"/>

<xs:complexType name="IDType">
  <xs:sequence>
    <xs:element name="ID" type="xs:string"/>
    <xs:element name="IDJurisdictionText" type="xs:string" minOccurs="0"/>
    <xs:element name="IDType" type="xs:string" minOccurs="0"/>
  </xs:sequence>
</xs:complexType>

我该如何注释我的类,以便
CaseTrackingID\ID
映射到
Case.ID
CaseTrackingID\idJudictionContext
映射到
Case.JudictionId

尝试以下方法:

[XmlRoot("CaseTrackingID")]
public class Case
{
    [XmlElement("ID")]
    public string ID;

    [XmlElement("IDJurisdictionText")]
    public string JurisdictionID;
}

当模式和类结构不完全一致时,您有两个选项,但没有一个这么好

public class Case
{
    [XmlIgnore] public string ID;
    [XmlIgnore] public string JuristictionID;

    [XmlElement("CaseTrackingID")]
    public CaseTrackingID SerializedCaseTrackingID
    {
      get 
      { 
          return new CaseTrackingID 
          { 
              ID = this.ID, 
              JuristictionID = this.JuristictionID,
          }; 
      }
      set 
      { 
          this.ID = value.ID; 
          this.JuristictionID = value.JuristictionID;
      }
    }
}
public class CaseTrackingID 
{
    [XmlElement("ID")]
    public string ID;

    [XmlElement("IDJurisdictionText")]
    public string JurisdictionID;
}

或者,如果您使用的是DCSerializer,则可以使用代理功能(http://msdn.microsoft.com/en-us/library/ms733064.aspx)在序列化时替换不同的类结构。

元素实际上是
元素的子元素,因此我不能按建议注释我的
Case
类。@Jeff Swensen,以及
CaseTrackingID
在您的类中是如何表示的?CaseTrackingID没有表示。我正在尝试将序列化注释应用于与数据库表匹配的代码优先EF类。@Jeff Swensen,根据提供的架构,您的XML应该如下所示:
。哪里是
Case
element?@Jeff Swensen,为部分架构提供
Case
element。“xsd.exe/c myschema.xsd”将生成一个标记类,您可以将其用作基础。