首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过序列化将数据从C#传输到Java

通过序列化将数据从C#传输到Java
EN

Stack Overflow用户
提问于 2011-08-13 14:13:10
回答 3查看 2.7K关注 0票数 2

我有一个用于Android的Java应用程序,它将包含一些静态数据,这些数据将在启动时加载。这些数据是由一个C#应用程序生成的,它是一组具有列表和字典的类,如下所示:

代码语言:javascript
复制
public class DataContainer
{
    public List<A> As = new List<A>();
    public Dictionary<int, B> Bs = new Dictionary<int, B>();
    // ...
}

public class A
{
    public int IdA;
    public int IdSomething;
    public DateTime dt;
    //...
}

public class B
{
    public int IdB;
    public string Name;
    List<C> Cs = new List<C>();
    //...
}

public class C
{
    //...
}

( DataContainer类是包含要传输的所有数据的根类。然后,我在Java项目中有一个类似的类结构,我希望将数据导入其中。)

我的问题是,我似乎找不到能够读写相同格式的.NET和Java /库的组合。

我在DataContractJsonSerializer中尝试过JSON,然后加载了GSON,但是这并不适用于字典/地图(列表很好,但我需要字典)。.NET导出程序使用的格式如下

代码语言:javascript
复制
"Bs":[{"Key":1,"Value":{...}}, ...]

当它看起来像GSON使用

代码语言:javascript
复制
{key:value,key:value,...}

我也看过一些XML,但是由于没有标准格式,所有库默认使用不同的东西,我真的不想手工编写所有的写入/解析规则。而且,与XML相比,JSON的开销要小得多。

那么,是否有一对用于.NET导出和Java导入的库可以使用列表和字典处理嵌套类?我找到的东西要么是在另一个方向,要么只是做了一个简单的类序列化。

顺便说一句:我也在用元组作为字典键,但是如果没有什么可以处理的话,我只会使用嵌套字典,这不是什么大事。

编辑:因为我不能回答我自己的问题,因为我的代表很低,这里有一个对我有用的解决方案:

因此,我尝试了更多的组合,在C#/.NET端使用JSon.NET进行序列化,然后在Java端使用GSON加载,除了元组之外,效果都很好。例如,使用Tuple作为字典的键将被序列化为:

代码语言:javascript
复制
{ "(False, 3)" : { ... }, "(True, 1)" : { ... }, ... }

所以我现在必须在Java中使用字符串键,但这不是一个问题。可能的解决方案是用.NET和Java为元组编写一个自定义类。

示例代码:

代码语言:javascript
复制
        string serializeObject = JsonConvert.SerializeObject(dataContainer, new IsoDateTimeConverter());
        File.WriteAllText("test.json", serializeObject);

和Java:

代码语言:javascript
复制
    InputStream is = getResources().openRawResource(R.raw.test); // open from /res/raw/test.json
    Gson gson = new Gson();
    InputStreamReader r = new InputStreamReader(is);
    DataContainer dc = gson.fromJson(r, DataContainer.class);
    Log.i("jsondebug", dc.Packers.get(0).Something);
EN

Stack Overflow用户

发布于 2011-08-13 14:35:49

XML映射可以很好地工作。序列化为XML并将其发送到。两端都需要编组器和解编组器。

Java有将XML绑定到对象的JAXB标准。如果你遵循这个标准,也许你就能做到这一点。

票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7050933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档