【问题标题】:Object serialization - from C# or java to Objective C对象序列化 - 从 C# 或 java 到 Objective C
【发布时间】:2012-05-04 02:31:04
【问题描述】:

服务器端 - C# 或 java

客户端目标 C

我需要一种在 C#\java 中序列化对象并在 Objective C 中反序列化的方法。 我是 Objective C 的新手,我想知道从哪里可以获得有关此问题的信息。

谢谢。

【问题讨论】:

  • JSON 非常轻量级,应该很容易在这三种语言之间进行映射

标签: c# java objective-c serialization


【解决方案1】:

除了显而易见的 JSON/XML 解决方案之外,protobuf 也可能很有趣。它有 Java//c++/python 后端,第 3 方也为 C# 和 Objective-c 创建了后端(虽然从未使用过)。

主要优点是解析速度快得多[1],体积小得多[2],因为它是一种二进制格式,而且版本控制从一开始就是一个重要因素。

[1] google 声称是 XML 的 20-100 倍

[2]同源3-10次

另一种类似于protobufs的技术是Apache Thrift。

Apache Thrift 是一个用于可扩展的跨语言服务开发的软件框架。 Apache Thrift 允许您在一个简单的定义文件中定义数据类型和服务接口。将该文件作为输入,编译器生成代码,用于轻松构建跨编程语言无缝通信的 RPC 客户端和服务器。

【讨论】:

  • 我猜速度和可读性之间存在折腾。由于它是二进制的,因此调试很可能会更加烦人......
  • @Paul 我从来不理解这个论点。如果我必须调试消息,我通常已经在代码中,并且可以在 3 行后当我得到解析的类时停止调试器。如果我真的要调试一些存储的数据,编写一个简单的脚本来获得人类可读的版本也很简单。恕我直言,唯一真正的缺点是,到目前为止,它还没有与外界交换数据。为此,我还可以理解 XML 的自我描述性质(如果没有 protobuf 文件,您将很难理解二进制 blob 在做什么)。
  • 续。以我自己的内部数据交换经验,我不记得上次我查看 XML/JSON 数据本身,而不仅仅是解析步骤后表示的数据结构——这对我来说似乎更简单,但最终仅此而已主观的
  • 我可能没有可用的调试器 - 这个对象正在通过网络传输,我可能不在我的工作站上,只有正确的设置/工具可用,但我可以简单地卷曲 url 并阅读它很容易 - 是的,它仍然是一个相对薄弱的例子:),这就是为什么我说这是一个折腾。当我编码时,我经常选择可读性而不是原始性能,直到分析器尖叫
  • @Paul 我认为该示例朝着与“外部世界”即第 3 方等数据交换的方向发展。我认为在这种情况下自我描述性(呃,是的,我知道那不是一言以蔽之)的XML确实是相当有用的。从可用性角度来看,我认为 XML 与现代库和 protobuf 几乎是一个折腾 - XML 与 JAXB 或小型 protobuf 类非常相似,尽管我认为如果其他一切都相同,我更喜欢带注释的版本
【解决方案2】:

JSON 用于相对直接的对象图 XML/REST 用于更复杂的对象图(数组/集合/嵌套数组等之间的区别)

【讨论】:

    【解决方案3】:

    Sudzc。我正在使用它。从 i-os 应用调用 Web 服务非常容易。

    您不必编写代码来序列化对象。

    【讨论】:

      【解决方案4】:

      JSON 可能是最好的选择,因为:

      • 使用简单
      • 它是人类可读的
      • 它是基于数据的,而不是依赖于任何更复杂的对象模型
      • 您将能够找到适合大多数语言的导入/导出库。

      恕我直言,从可移植性的角度来看,序列化更复杂的对象并不是一个好主意,因为通常一种语言/平台无法有效地表达另一种语言/平台的概念。例如一旦开始声明序列化对象的“类型”或“类”,就会遇到语言之间对象模型不同的棘手问题。

      【讨论】:

        【解决方案5】:

        在 iOS 上,有几个带有 Objective-C API 的 JSON 框架和库:

        可能是最突出的。

        JSONKit 快速简单,但只能解析 JSON 文本的连续部分。这意味着,您需要将下载的数据保存到临时文件中,或者您需要将所有下载的 JSON 文本保存到 NSMutableData 对象(保存在内存中)。只有在完全下载完 JSON 文本后,您才能开始解析。

        SBJson 使用起来更灵活。它提供了一个额外的“SAX 风格”接口,可以解析部分输入,并且每个“输入”可以解析多个 JSON 文档(例如每个网络连接多个 JSON 文档)。当您想要连接到“流式 API”(例如 Twitter 流式 API)时,这非常方便,每个连接可以到达许多 JSON 文档。缺点是,它比 JSONKit 慢很多。

        TouchJson 甚至比 SBJson 还要慢。

        不过,我个人的偏好是其他的。它比 JSONKit 快(在 arm 上快 20%),具有额外的 SAX 样式 API,可以处理“流式 API”,可以同时下载和解析,可以处理非常大的 JSON 字符串而不会严重影响内存占用,同时它是特别容易与 NSURLConnection 一起使用。 (嗯,我可能有偏见,因为我是作者)。

        你可以看看JPJson(Apache License v2):

        JPJson - 不过它仍处于测试阶段。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-08
          • 2011-06-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多