【问题标题】:How can I parse REST service response?如何解析 REST 服务响应?
【发布时间】:2011-10-13 05:52:17
【问题描述】:

我已经设置了我的 REST 服务,它工作正常。这是我从服务中得到的响应,如图所示:

如何在我的 WPF 应用程序中解析这种类型的请求?

【问题讨论】:

    标签: c# wpf wcf rest wcf-rest


    【解决方案1】:

    嗯,有很多方法。您可以使用XmlReader,将其加载到XmlDocument,等等。

    前一个选项公开了一个接受输入流和 XmlReaderSettings 实例的构造函数。

    但是这个响应是如何返回的呢?如果您向我们展示了一些代码,或者提供了更多信息,那么您可能会发现我们有更合适的不同方法。

    【讨论】:

    • 你的意思是我需要手动解析 Xml 并牺牲强类型语言的所有好处?我希望以更多面向对象的方式响应,其中对象具有属性和变量。这种解析方式极其繁琐且容易出错。
    • 我同意,但如果你有与这些数据相关的强类型类,那么我认为你会知道,因此提到了它。正如我所说,如果您提供更多信息,也许是一些代码,我们可能会根据需要为您提供帮助。
    • 我做了一个 Restful 服务,它返回一个 List。 Publishers 基本上是一个实体。我正在使用 EntityFramework v4.1。这有帮助吗?还是我应该给你这个代码?
    【解决方案2】:

    您收到的响应似乎是一个包含发布者信息的 XML 结构。至于解析它,您有许多选项,但是所有这些都要求/希望您拥有生成的 XML 的架构。

    1. 使用 Visual Studio XSD 工具在项目中创建架构类。一旦你有了这些,你就可以将 XML 反序列化为一个对象。然后,您可以在 WPF 应用程序中使用该对象。
    2. 使用 XmlDocument 加载 XML,然后使用 xPath 查询提取您需要的数据。
    3. 使用 XDocument (linq to XML) 加载 XML,然后使用 LINQ 样式查询来提取您需要的数据。

    就个人而言,我会使用选项 1 - 它确实需要架构(其他选项在技术上不需要),但它确实为您提供了比 xpath/linq 查询更容易维护和使用的对象。

    还值得一提的是,根据服务引用添加到客户端的方式(以及服务如何公开自身),您可能已经将此 XML 类绑定到客户端服务引用中。例如,您在客户端中的服务参考可能允许您这样做:

    PublisherInfo pi = myServiceClient.GetPublisherInfo();
    

    在这种情况下,所有从 XML 到 PublisherInfo 的转换都会为您处理。我猜上面的示例 XML 是通过在浏览器中调用服务获得的,因此转换为 PublisherInfo 显然不会发生,因为这会发生在客户端代码中。

    【讨论】:

    • 谢谢 我想选择选项 1。你能告诉我如何使用 Visual Studio xsd 工具吗?另外,我们真的可以将服务引用添加到 Restful 服务,比如普通的 asmx 和 WCF 服务吗?如果是这样,那么这些类将由 VS2010 创建 :) 所以我不必担心。
    • 服务参考解决方案取决于服务实现,如果它类似于“string DoSomething(...)”并且字符串返回是 XML,那么您将没有类。如果实现类似于“PublishInfo DoSomething(...)”,那么它会。至于 xsd 工具,这是 VS 安装的一部分,可以通过 VS 命令提示符执行,例如xsd /c myschema.xsd
    • XSD 工具安装路径:C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin
    【解决方案3】:

    为什么需要解析呢,在WPF项目中添加服务的引用时为什么不用Visual Studio生成的类?

    如果你真的想解析它,请使用其他答案中提到的 Xml 库

    【讨论】:

    • 我正在使用 REST 服务。我真的不知道你可以添加 RESTful 服务的服务引用,比如普通的 WCF 和 asmx 服务。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    相关资源
    最近更新 更多