0

私はこれを何度もやった気がしますが、あまりにも多くのフープをジャンプしなければならないようで、もっと簡単な方法があるかどうか疑問に思っています.

WCF を使用して API (REST および SOAP エンドポイント) を構築しています。私は自分の呼び出しの 1 つから XML 応答をどのように表示したいかを構築しています。同等のオブジェクト モデル (データ コントラクト) を取得する最も簡単な方法を知りたいです。

GetSectionInvitesResponse が API 呼び出しから返される最上位コントラクトであるサンプル XML 要求を次に示します。

<GetSectionInvitesResponse>
 <UserID></UserID>
     <OrganizationInvites>
            <SectionInvites>
        <SectionSubscriber>
            <Section>
                <ID></ID>
                <Name></Name>
                <Description></Description>
                <Descriptor></Descriptor>
                <ParentID></ParentID>
            </Section>
            <SectionSubscriberID>
        </SectionSubscriber>
        <SectionSubscriber>
            <Section>
                <ID></ID>
                <Name></Name>
                <Description></Description>
                <Descriptor></Descriptor>
                <ParentID></ParentID>
            </Section>
            <SectionSubscriberID>
        </SectionSubscriber>
    </SectionInvites>
 </OrganizationInvites>
 <OrganizationInvites>
            <SectionInvites>
        <SectionSubscriber>
            <Section>
                <ID></ID>
                <Name></Name>
                <Description></Description>
                <Descriptor></Descriptor>
                <ParentID></ParentID>
            </Section>
            <SectionSubscriberID>
        </SectionSubscriber>
        <SectionSubscriber>
            <Section>
                <ID></ID>
                <Name></Name>
                <Description></Description>
                <Descriptor></Descriptor>
                <ParentID></ParentID>
            </Section>
            <SectionSubscriberID>
        </SectionSubscriber>
        <SectionSubscriber>
            <Section>
                <ID></ID>
                <Name></Name>
                <Description></Description>
                <Descriptor></Descriptor>
                <ParentID></ParentID>
            </Section>
            <SectionSubscriberID>
        </SectionSubscriber>
    </SectionInvites>
 </OrganizationInvites>
</GetSectionInvitesResponse>

編集 最初の投稿では十分に明確ではなかったので、この質問から何を得ようとしているのかをより明確にしたいと思います。

上記と同じ XML スキーマに従いながら、最小限の重複コードで SOAP および REST を介してこれを公開する最良の方法を知りたいですか?

4

1 に答える 1

0

理論的には、次のことができます。

  1. サンプル xml をお気に入りの xml エディターに貼り付けます
  2. エディタで xml スキーマを自動生成します。Visual Studio では、その XML->Generate Schema を選択します。たとえばInvitesResponse.xsd
  3. コマンド プロンプトから実行svcutil /dconly InvitesResponse.xsd /language:C#して、DataContract ファイルを作成します。

好奇心から、これらの手順を実行したところ、次のことがわかりました。

  1. <SectionSubscriberID>xml で正しく閉じられていません。
  2. DataContractSerializer が、現在定義されている方法でノード シーケンスを許可しないこと。

svcutil 出力:

エラー: 名前空間 '' のタイプ 'GetSectionInvitesResponse' をインポートできません。要素 'OrganizationInvites' の 'maxOccurs' は 1 でなければなりません。型をデータ コントラクト型にマップできるようにスキーマを変更するか、ImportXmlType を使用するか、別のシリアライザーを使用してください。

そこで、複合型では maxOccurs = 1 でなければならないことを指摘するDataContract Schema Referenceを見つけました。

DataContract シリアライザーを保持し、XmlSerializer に切り替えたくない場合は、おそらくスキーマを変更する必要があります...これは、コーディングを開始したばかりの場合にもわかります。

@John Sanders の知恵が働き始めたのはこの時点で、私はやめました。

于 2013-01-22T17:47:55.907 に答える