使用 DBXJSONReflect 可以把json 和TObject 类型 相互转换。但是转换的结果却是让人难以接受。
使用方法见:http://blog.csdn.net/cmdasm/article/details/12784627
例如:
delphi:
{"type":"dtTest.TChapter","id":3,"fields":{"ID":2,"Caption":"我的章节2"}}
C#, java ,js:
{"ID":5,"Caption":"我的章节5"}
delphi转换过来的对象,每个对象都增加了,{"type":"dtTest.TChapter","id":3,"fields":{}
对于数据集的时候这种情况可想而知。
这样,delphi写的客户端和其他语言写的服务器的数据对接就出现了兼容问题。
单个对象还好处理,但是对于下面这种结构,要兼容,可就非常困难了。
delphi 下:
{"type":"dtTest.TRChapterArr","id":1,"fields":{"Body":[{"type":"dtTest.TChapter","id":2,"fields":{"ID":1,"Caption":"我的章节1"}},{"type":"dtTest.TChapter","id":3,"fields":{"ID":2,"Caption":"我的章节2"}},{"type":"dtTest.TChapter","id":4,"fields":{"ID":3,"Caption":"我的章节3"}},{"type":"dtTest.TChapter","id":5,"fields":{"ID":4,"Caption":"我的章节4"}},{"type":"dtTest.TChapter","id":6,"fields":{"ID":5,"Caption":"我的章节5"}}],"LoginState":1,"MessageStr":"","State":1}}
C# java:
{"Body":[{"ID":1,"Caption":"我的章节1"},{"ID":2,"Caption":"我的章节2"},{"ID":3,"Caption":"我的章节3"},{"ID":4,"Caption":"我的章节4"},{"ID":5,"Caption":"我的章节5"}],"LoginState":1,"MessageStr":"","State":1}
各位大侠,有没有好的办法能解决这个问题。
不同语言转换规则不一样, DBX是为了自己交互方便用的, 如果想和其他语言做数据交换最好自定义格式
自己写一个转换不就好了, 没啥麻烦的, 还可以先把列名和列类型都提取出来, 数据单独存放, 这样还能省字节呢
比如:
{ "T": [ { "T": 0, "N": "ID", "L": 20}, { "T": 0, "N": "Caption", "L": 20}], "R": [ [ 1,"我的章节1"], [ 2,"我的章节2"], [ 3,"我的章节3"], [ 3,"我的章节4"]] }