我觉得我已经多次这样做了,但似乎我必须跳过太多的箍,我想知道是否有更简单的方法。
我正在使用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模式?
答案 0 :(得分:0)
理论上你可以:
InvitesResponse.xsd
。svcutil /dconly InvitesResponse.xsd /language:C#
以创建DataContract文件。出于好奇,我经历了这些步骤并发现:
<SectionSubscriberID>
未在您的xml中正确关闭。svcutil输出:
错误:在命名空间''中键入'GetSectionInvitesResponse'不能 进口。元素'OrganizationInvites'上的'maxOccurs'必须为1。 要么改变架构,以便类型可以映射到数据契约 类型或使用ImportXmlType或使用不同的序列化程序。
所以我发现DataContract Schema Reference指出在复杂类型中必须有maxOccurs = 1。
如果你想保留DataContract序列化程序而不是切换到XmlSerializer,你可能不得不改变你的架构......如果你刚刚开始编码,你也会发现它。
正是在这一点上@John Sanders的智慧开始了,我停了下来。