跨平台JSON序列化

时间:2017-11-02 16:05:31

标签: java c# json serialization

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

问题:

  • 我在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

  

{     &#34; BarList&#34;:[       {         &#34; X&#34;:&#34;嗨&#34;,         &#34; Y&#34;:5       },       {         &#34; X&#34;:&#34;你好&#34;,         &#34; Y&#34;:10       }     ]     &#34;姓名&#34;:&#34; foo&#34;   }

在Java中使用此对象

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

现在,我可以简单地做一些事情:

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依赖

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

如果您想创建自己的框架,请玩得开心。 JSON比你想象的要复杂得多,所以根据你想要支持它的大部分子集,这个任务可能非常耗时。