0

次のような XML があります。

<Contract Contract="123">
    <Contractbegin Contractbegin="20130301" />
    <Contractend Contractend="20130331" />
</Contract>

クラスは次のようになります

public class Contract
{
     [XmlElement("Contractbegin")]
     public Contractbegin Contractbegin {get; set;}

     [XmlElement("Contractend")]
     public Contractend Contractend {get; set;}
}

public class Contractbegin
{
     [XmlAttribute("Contractbegin")]
     public String value {get;set;}
}

public class Contractend
{
     [XmlAttribute("Contractend")]
     public String value {get;set;}
}

質問が 2 つあります。

ラッピング クラスの Contractend と Contractbegin を使用せずに逆シリアル化することは可能ですか?

そのための共通クラスを作成することは可能ですか? 原因 Contractbegin と -end はほとんど同じように見えます..もっとそれを行う方法であると確信しています...一般的な= D

前もって感謝します。

編集

前の xml は単なる例であり、実際には次のようになります。

<Vorgang Vorgang="Vorgang1">
    <Lieferrichtung Lieferrichtung="Z07" />
    <Vertragsbeginn Vertragsbeginn="20130301" />
    <Vertragsende Vertragsende="20130331" />
    <Bilanzierungsbeginn Bilanzierungsbeginn="20130301" />
    <Bilanzierungsende Bilanzierungsende="20130331" />
    <Netznutzungsvertrag Netznutzungsvertrag="E02" />
    <Zahler_der_Netznutzung Zahler_der_Netznutzung="E10" />
    <Bilanzierungsgebiet Bilanzierungsgebiet="11YV00000000080S">
        <ID ID="11YV00000000080S" />
    </Bilanzierungsgebiet>
    <Regelzone Regelzone="10YDE-VE-------2">
        <ID ID="10YDE-VE-------2" />
    </Regelzone>
    <Bilanzkreis Bilanzkreis="11XGASAG-STROM-5">
        <ID ID="11XGASAG-STROM-5" />
    </Bilanzkreis>
    <Zaehlpunkt Zaehlpunkt="DE0000801230500000000000012520182">
        <ID ID="DE0000801230500000000000012520182" />
    </Zaehlpunkt>
    <Standardlastprofil__syn_ Standardlastprofil__syn_="HB">
        <Profil Profil="HB" />
        <Codeliste Codeliste="89" />
    </Standardlastprofil__syn_>
    <Zaehlverfahren Zaehlverfahren="E02">
        <Verfahren Verfahren="E02" />
    </Zaehlverfahren>
    <Haushaltskunde Haushaltskunde="Z15">
        <Haushaltskunde Haushaltskunde="Z15" />
    </Haushaltskunde>
    <Zaehlpunktdaten Zaehlpunktdaten="1">
        <Bezeichnung Bezeichnung="DE0000801230500000000000012520182" />
        <Jahresverbrauchsprognose Jahresverbrauchsprognose="2322">
            <Prognose Prognose="2322" />
        </Jahresverbrauchsprognose>
        <Zeitreihentyp__Z21_ Zeitreihentyp__Z21_="SLS">
            <Code Code="SLS" />
        </Zeitreihentyp__Z21_>
    </Zaehlpunktdaten>
    <Zaehler Zaehler="2">
        <Zaehlpunkt Zaehlpunkt="DE0000801230500000000000012520182" />
        <Zaehlertyp Zaehlertyp="Z30">
            <Nummer Nummer="31078265" />
        </Zaehlertyp>
    </Zaehler>
    <Kunde Kunde="Zozula">
        <Nachname_Firma Nachname_Firma="Zozula" />
        <Vorname Vorname="Octavian" />
        <Typ Typ="Z01" />
    </Kunde>
    <Lieferanschrift Lieferanschrift="Rackebüller Weg18">
        <Strasse Strasse="Rackebüller Weg" />
        <Hausnummer Hausnummer="18" />
        <Ort Ort="Berlin" />
        <PLZ PLZ="12305" />
        <Land Land="DE" />
    </Lieferanschrift>
</Vorgang>

したがって、たとえば、要素 Haushaltskunde では、xsd ファイルを作成できず、クラス =( の生成を続行できません。

4

1 に答える 1

1

あなたの質問はxml -> poco関係していて、その逆ではないので、すでに何らかの種類が存在することxmlを意味します。つまり、そもそもクラスを手で書くべきではありません! (もちろん、よほどの事情がない限り)

ビジュアル スタジオのコマンド プロンプトでこれを行います。

xsd.exe yourexamplefile.xml
xsd.exe yourexamplefile.xsd /classes

そして出来上がり!これで、自動生成されたC#クラスができました。このクラスは、思いのままにシリアル化および逆シリアル化できます。

あなたの特定のケースを考えると、これはxsd.exe再帰要素を処理できないため機能しませんでしたが、ここで利用可能なツールは. 最初にそれを使用xsd.exeしてから、通常どおり使用してC#クラスを生成します。

于 2013-10-11T12:01:09.090 に答える