Xml自定义XSD类型的序列化

时间:2011-07-18 14:42:34

标签: 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"/>
    <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.IDCaseTrackingID\IDJurisdictionText映射到Case.JurisdictionID

2 个答案:

答案 0 :(得分:2)

试试这个:

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

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

答案 1 :(得分:1)

当架构和类结构不完全对齐时,你有几个选项,其中没有一个很漂亮..

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)在序列化时替换不同的类结构。 / p>