【问题标题】:Best Practice: Sending Objects over TCP/IP between Platforms [closed]最佳实践:在平台之间通过 TCP/IP 发送对象 [关闭]
【发布时间】:2013-12-01 17:27:12
【问题描述】:

我想做一个可以将对象发送到其他应用程序的应用程序。

一个将用 .NET(C# Winforms)开发,另一个用 Java 开发。 .NET 部分将在 Windows 客户端上运行,而 Java 客户端将在资源较少的 Unix 操作系统上运行(如智能手机)。

我正在寻找最佳实践,以便将此对象(比如说 Car)从我的 .NET 应用程序发送到 Java 应用程序。

我想我必须先序列化我的 Object,然后发送它,然后我必须在 Java 端再次反序列化它。

我的主要标准:

  • 简单,但最重要:nice/smart
  • 通用,如果可能的话。

我正在考虑序列化我的类 Car 并在另一个平台上拥有相同的类结构,只是反序列化它,自动加载属性。

应用程序应该这样做。有一个数据库连接到其中一个平台,但这不是我的问题。

我在考虑 JSON 或 XML 序列化,但我不知道这是否是最好/最聪明的方法。

我很高兴有任何建议。

【问题讨论】:

  • Close-Voting: 要求我们推荐或查找工具、库或最喜欢的非现场资源的问题对于 Stack Overflow 来说是题外话,因为它们往往吸引固执己见的答案和垃圾邮件。相反,请描述问题以及迄今为止为解决该问题所做的工作。
  • 我想补充一点,我不是在寻找工具、库或场外资源。我正在为我的问题寻找一种程序化方法。
  • 在 .Net 端,使用 WCF。在 java 方面,我不知道,可能一定存在一个可怕的 java hack。
  • 这两个兼容吗?我在看是否有类似 Java 和 .NET 通用的标记语言之类的东西,因此是通用的。
  • xml, json, bson, protobuf...选项很丰富...

标签: c# java .net winforms tcp


【解决方案1】:

我确实实现了一个跨平台 SSO 框架,该框架使用 JSON 作为平台特定编组解析器之间的通用语言。

为了可读性和名称解析,Java common practices 后面跟着可交换的命名空间和类名。

此特定实现选择的载体是直接 TCP/IP 持久连接,但序列化/反序列化层应该完全不知道它。

一些细节需要特别注意 - 例如 DateTime 值。为了避免双方的假设,我采用了基于 GMT 0 的 big endian 作为参考格式。集合(数组、列表)也值得关注。

【讨论】:

    【解决方案2】:

    双方都可以使用 SOAP - 各种 Java 工具可以生成/解析 SOAP 服务,与 .NET 相同。

    如果您只想要没有开销的 TCP/IP 通信 - 在两端使用 Sockets API - 在任一端序列化和反序列化对象。

    【讨论】:

    • 如果我在 .NET 中序列化一个对象并在 Java 上反序列化它,我必须重新格式化反序列化的对象还是它们只是兼容的?我可以使用特殊的包装类来做到这一点,但这是最佳做法吗?抱歉,我只是想学着做正确的事。
    • 可能不是直接指向对象(尽管您可以随时尝试)。我在考虑序列化为 xml 或 json
    猜你喜欢
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 2013-11-30
    • 1970-01-01
    • 2011-08-26
    • 2014-01-21
    • 1970-01-01
    • 2011-06-16
    相关资源
    最近更新 更多