我正在为 delphi 2012 中的 Dropbox 开发一个包装器。我遇到的问题是反序列化 json 响应。当我请求我的帐户中的文件夹和文件列表时,我收到如下所示的响应:
{
"hash": "some_hash",
"thumb_exists": false,
"bytes": 0,
"path": "/",
"is_dir": true,
"size": "0 bytes",
"root": "dropbox",
"contents":
[
{
"revision": 11,
"rev": "b074cbcbb",
"thumb_exists": false,
"bytes": 0,
"modified": "Mon, 23 Apr 2012 19:19:27 +0000",
"path": "/Apps",
"is_dir": true,
"icon": "folder",
"root": "dropbox",
"size": "0 bytes"
},
{
"revision": 142,
"rev": "8e074cbcbb",
"thumb_exists": false,
"bytes": 0,
"modified": "Wed, 09 May 2012 22:55:44 +0000",
"path": "/code",
"is_dir": true,
"icon": "folder",
"root": "dropbox",
"size": "0 bytes"
},
{
"revision": 7,
"rev": "7074cbcbb",
"thumb_exists": false,
"bytes": 246000,
"modified": "Mon, 23 Apr 2012 18:40:51 +0000",
"client_mtime": "Mon, 23 Apr 2012 18:40:52 +0000",
"path": "/Getting Started.pdf",
"is_dir": false,
"icon": "page_white_acrobat",
"root": "dropbox",
"mime_type": "application/pdf",
"size": "240.2 KB"
}
],
"icon": "folder"
}
我希望能够使用 TJSONUnMarshal 对象来解析它,但事实证明 TJSONUnMarshal 期望 json 看起来像这样:
{
"type":"DropboxApiU.TFile",
"id":1,
"fields":
{
"hash": "some_hash",
"thumb_exists": false,
"bytes": 0,
"path": "/",
"is_dir": true,
"size": "0 bytes",
"root": "dropbox",
"contents":
[
{
"type":"DropboxApiU.TFile",
"id":1,
"fields":
{
"revision": 11,
"rev": "b074cbcbb",
"thumb_exists": false,
"bytes": 0,
"modified": "Mon, 23 Apr 2012 19:19:27 +0000",
"path": "/Apps",
"is_dir": true,
"icon": "folder",
"root": "dropbox",
"size": "0 bytes"
}
},
我看过这个页面,认为它可能是我要找的东西,但它从来没有真正涉及如何使用 TTypeObjectReverter (我认为这是我需要使用的)而且我似乎找不到网上的例子。
实现这一目标的最佳方法是什么?我希望我可以只写一个 TTypeObjectReverter 或类似的东西,但我需要查看一个示例才能理解它。
编辑 这是两者之间差异的屏幕截图。红色不是在 Dropbox 服务器的响应中发送的,而是解组器所期望的。