【问题标题】:Cross-Platform JSON Serialization跨平台 JSON 序列化
【发布时间】:2017-11-03 07:02:18
【问题描述】:

我希望在两个独立的桌面应用程序之间共享对象数据。通常,我会使用序列化库在一个应用程序中序列化对象,然后在另一个应用程序中反序列化它们(并将数据转换为对象)。

问题:

  • 我正在用 C# 序列化对象
  • 在 Java 中反序列化它们

示例

这是一个我想用 Java 反序列化的 c# 类 (Foo):

class Foo
{
    public List<Bar> BarList {get;set;}
    public string Name { get; set; }
}
class Bar
{
    public string X { get; set; }
    public int Y { get; set; }
}

注意:我使用JSON.NET进行序列化

用于示例 Foo 对象的 JSON

{ “酒吧清单”:[ { “X”:“嗨”, “是”:5 }, { “X”:“你好”, “是”:10 } ], “名称”:“富” }

在 Java 中使用这个对象

假设我在 Java 中有一个非常相似的 Foo 类。它有标准私有成员和公共 getter/setter 方法,而不是 Properties。

现在,我可以简单地执行以下操作:

class Foo
{
    private ArrayList<Bar> barList;
    private string name;

    public Foo(string pathToJsonFile)
    {
         // Method/Code to manually grab the needed JSON and call setters
    }

    // Setters/Getters
}

此解决方案有效,但我宁愿避免在我的 Java 项目中的每个对象上都使用此构造函数。另外,如果我有深度耦合的对象,这个方法会很大(反序列化这个对象,但它包含也需要反序列化的对象等)。

我的问题:

Java 标准库 中是否有任何反序列化方法可以简化此过程?

算法想法也将不胜感激(我不介意创建一个小框架)。

第三方解决方案是可以的,只要它们是完全开源的,没有 .jar 依赖项

【问题讨论】:

    标签: java c# json serialization


    【解决方案1】:

    你看过JSON-B(JSR 367)吗?虽然这似乎还没有出现在标准库中,但最终规范 was approved 在今年 6 月。有一个名为Yasson 的官方参考实现是开源的。

    如果这不是你要找的,有各种处理 Java 中 JSON 绑定的第三方开源库,例如 JacksonGsonGensonFlexJson 和 @ 987654328@ 仅举几例。其中,前两个似乎是最受欢迎的。您可以在json.org 上找到更多库。

    【讨论】:

    • 您是否知道此实现是否适用于源不可访问的对象(例如 .jar 引用中的对象)?
    • 我不知道;您必须查看规范。不过,我认为 Gson 支持这一点。
    【解决方案2】:

    上次我检查时,Java SE 没有。在 Java EE 中,至少在包 java.ws.rs 中有 API。您可以使用 API 并且几乎独立于实现。

    如果您想创建自己的框架,请玩得开心。 JSON 比您想象的要复杂得多,因此根据您想要支持的它的子集有多大,这项任务可能会非常耗时。

    【讨论】:

    • 我不是在寻找一种可以处理几乎任何对象的解决方案。谷歌 GSON 实际上对此非常好(但它具有 .jar 依赖项)。我认为如果我足够分解工作,为 20 个以下的类制作我自己的反序列化框架应该不会那么糟糕。
    • 如果您只需要当前使用的子集,我认为这没什么大不了的。不知道怎么回事,为什么你不能使用第三方库,但是 gl&hf。
    • 代码从源文件远程运行。无法从 .jars 运行代码。我也许可以做 GSON,但上次我尝试有一些 .jar 文件的引用。现在可能不同(或可修复)。
    猜你喜欢
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    • 2010-11-28
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    相关资源
    最近更新 更多