我希望在两个独立的桌面应用程序之间共享对象数据。通常,我会使用序列化库在一个应用程序中序列化对象,然后在另一个应用程序中反序列化它们(并将数据转换为对象)。
问题:
示例
这是一个我想在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依赖。
答案 0 :(得分:1)
你看过JSON-B(JSR 367)了吗?虽然这似乎还没有出现在标准库中,但今年6月的最终规范was approved。有一个名为Yasson的官方参考实现是开源的。
如果这不是您想要的,那么有各种第三方开源库可以用Java处理JSON绑定,例如Jackson,Gson,Genson ,FlexJson和json-simple仅举几例。其中,前两个似乎是最受欢迎的。您可以在json.org上找到更多的库。
答案 1 :(得分:0)
上次我查看时,Java SE没有这个。在Java EE中,至少在包java.ws.rs
中有API。您可以使用API并且几乎独立于实现。
如果您想创建自己的框架,请玩得开心。 JSON比你想象的要复杂得多,所以根据你想要支持它的大部分子集,这个任务可能非常耗时。