XML сериализация пользовательского типа XSD - PullRequest
2 голосов
/ 18 июля 2011

У меня есть член класса 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\IDJurisdictionText отображался на Case.JurisdictionID?

Ответы [ 2 ]

2 голосов
/ 18 июля 2011

Попробуйте это:

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

    [XmlElement("IDJurisdictionText")]
    public string JurisdictionID;
}
1 голос
/ 18 июля 2011

Когда схемы и структуры классов не совсем совпадают, у вас есть несколько вариантов, ни один из которых не очень симпатичный ..

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) для замены другой структуры классов во время сериализации.

...