0

我觉得我已经这样做了很多次,但似乎我必须跳过太多的箍,我想知道是否有更简单的方法。

我正在使用 WCF 构建 API(REST 和 SOAP 端点)。我正在从我的一个调用中构建我希望 XML 响应看起来像的样子,并且我想知道获取其等效对象模型(数据契约)的最简单方法。

这是一个示例 XML 请求,其中 GetSectionInvitesResponse 是应从 API 调用返回的顶级合同。

<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>

编辑 因为我在最初的帖子中不够清楚,所以我想更清楚地说明我打算从这个问题中获得什么。

我想知道通过 SOAP 和 REST 以最少的重复代码公开此内容的最佳方法,同时遵循与上所示相同的 XML 模式?

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 或使用不同的序列化程序。

所以我发现DataContract Schema Reference指出在复杂类型中必须有 maxOccurs = 1。

如果您想保留 DataContract 序列化程序而不是切换到 XmlSerializer,您可能必须更改您的架构......如果您刚开始编码,您也会发现。

正是在这一点上,@John Sanders 的智慧开始发挥作用,我停了下来。

于 2013-01-22T17:47:55.907 回答