2

我正在为某些数据构建和设计一个(大部分)只读接口。我将使用 ASP.NET MVC 来构建一个 psudo-restful API。我想知道是否有人可以提供一些资源来为各种移动平台(iPhone、Android、Blackberry、Windows Mobile 等)构建全客户端应用程序。

我认为提供 XML 数据将是最简单和通用的,但是例如在 Objective-C 中解析 XML 对我来说听起来并不有趣,但也许有一些很好的库可以帮助缓解这个问题任务?

换句话说,在客户端实现最快的格式是什么?是否有适用于 iPhone 或 Android 的 JSON 解析器?我知道有 .NET JSON 解析器,但不确定其他平台——还有另一种可能更好的格式吗?还是我应该坚持使用纯 XML 并在每个平台上以不同的方式处理它?

4

5 回答 5

1

您可以创建一个 WCF REST 服务,以 json 和 xml 两种格式公开结果,并且根据设备,您可以选择更适合设备功能的格式。这也比创建和 ASP.MVC“pseudo-restful API”更好。

WCF 服务如下所示:

[ServiceContract]
public interface IService
{
    [OperationContract]
    [WebInvoke(
        Method = "GET",
        ResponseFormat = WebMessageFormat.Xml,
        BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "DoWork/xml/{ID}/{Filter}")]
    void DoWork(int ID, string Filter);

    [OperationContract]
    [WebInvoke(
        Method = "GET",
        ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "DoWork/json/{ID}/{Filter}")]
    void DoWorkJson(int ID, string Filter);
}

您可以在此处找到创建 WCF 休息服务的一个很好的示例

于 2010-04-27T07:55:41.053 回答
0

我曾在 iPhone 上解析 XML。如果您正在寻找 DOM 解析器,KissXML是我建议您选择的第 3 方库。它易于使用且性能良好。如果您正在寻找基于流的解析器,iPhone SDK 中的 NSXMLParser 类会很好。JSON 被认为比 XML 更轻量,因此更适合移动设备。iPhone 有用于 JSON 解析的 3rd 方库。你需要用谷歌搜索他们。

于 2010-04-27T05:28:55.457 回答
0

坚持使用纯 XML 并在每个平台上以不同方式处理它

这真的是唯一的出路。没有神奇的跨平台框架,如果有它仍然会被 iPhone 禁止

于 2010-04-27T05:35:06.623 回答
0

除非您有充分的理由使用 XML,否则请使用 JSON。来自网络服务的绝大多数响应都可以使用 JSON 进行充分描述,并且有许多库(至少在 iPhone 上,我认为在 Android 等上也是如此)允许您将 JSON 解析为2-3 行代码中的本机数据结构。

在 iPhone 平台上,json-framework可以让你轻松解析 JSON。

我想问题是:假设您正在使用的每个客户端平台都有一个 JSON 解析框架,那么您从使用 XML 获得什么优势来证明必须编写超过 3 行代码进行解析?在大多数情况下,没有优势。

于 2010-04-27T05:35:27.887 回答
0

使用 Json,所有移动平台都有 Json 解析器。对于 Android 来说,这可能不是最有效的解决方案,但可能是最务实的。

Android 原生支持 XML,但不支持 Json。换句话说,我想说的是,Android 手机配备了硬件加速 XML 解析器(基本上是他们自己专用的小芯片),但在 Json 解析方面,Android 手机没有,所以他们必须使用他们的 CPU 来完成这项工作。从理论上讲,这将意味着 Android 解析 Json 比解析 XML 将使用更多的 CPU 周期、更多的能量和更多的电池。话虽如此,不要陷入过早优化的陷阱,很有可能,无论存在什么差异,对于您的用例场景都可能微不足道(不要相信我的话,只要在您的应用程序完成后使用您的分析器完成的)。

于 2010-04-27T06:58:08.513 回答