我有一个用于Android的Java应用程序,它将包含一些静态数据,这些数据将在启动时加载。这些数据是由一个C#应用程序生成的,它是一组具有列表和字典的类,如下所示:
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导出程序使用的格式如下
"Bs":[{"Key":1,"Value":{...}}, ...]当它看起来像GSON使用
{key:value,key:value,...}我也看过一些XML,但是由于没有标准格式,所有库默认使用不同的东西,我真的不想手工编写所有的写入/解析规则。而且,与XML相比,JSON的开销要小得多。
那么,是否有一对用于.NET导出和Java导入的库可以使用列表和字典处理嵌套类?我找到的东西要么是在另一个方向,要么只是做了一个简单的类序列化。
顺便说一句:我也在用元组作为字典键,但是如果没有什么可以处理的话,我只会使用嵌套字典,这不是什么大事。
编辑:因为我不能回答我自己的问题,因为我的代表很低,这里有一个对我有用的解决方案:
因此,我尝试了更多的组合,在C#/.NET端使用JSon.NET进行序列化,然后在Java端使用GSON加载,除了元组之外,效果都很好。例如,使用Tuple作为字典的键将被序列化为:
{ "(False, 3)" : { ... }, "(True, 1)" : { ... }, ... }所以我现在必须在Java中使用字符串键,但这不是一个问题。可能的解决方案是用.NET和Java为元组编写一个自定义类。
示例代码:
string serializeObject = JsonConvert.SerializeObject(dataContainer, new IsoDateTimeConverter());
File.WriteAllText("test.json", serializeObject);和Java:
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);发布于 2011-08-13 14:35:49
XML映射可以很好地工作。序列化为XML并将其发送到。两端都需要编组器和解编组器。
Java有将XML绑定到对象的JAXB标准。如果你遵循这个标准,也许你就能做到这一点。
https://stackoverflow.com/questions/7050933
复制相似问题