我正在使用 SuperObject 来生成 JSON。我正在使用的服务器有一些对数据结果进行排序的规范(这与排序数据有关的事实与我关于排序的实际问题无关)。问题是,服务器希望这些值按照如何排序的顺序列出,例如......
“种类”: { “first_sort_field”:1, “second_sort_field”:1, “第三个排序字段”:-1, “第四个排序字段”:1 }
1 表示上升,-1 表示下降。但这不是重要的部分。重要的是sort
对象中的这些值必须以这种方式组织。
为了产生这个对象,我这样做:
var
O, O2: ISuperObject;
X: Integer;
//more
begin
O:= SO; //main object
//more
O2:= SO; //sub object
for X := 0 to FSort.Count - 1 do begin
case FSort[X].Direction of
sdAscending: O2.I[FSort[X].FieldName]:= 1;
sdDescending: O2.I[FSort[X].FieldName]:= -1;
end;
end;
O.O['sort']:= O2;
//more
end;
当我使用 SuperObject 序列化这个“排序”对象时,问题就出现了。这些值似乎是重新排列的,所以例如上面的 JSON 实际上会是这样的:
“种类”: { “first_sort_field”:1, “第四个排序字段”:1 “second_sort_field”:1, “第三个排序字段”:-1, }
这与我预期的顺序不同。这会导致服务器返回以与预期不同的方式排序的响应数据。
问题是,我怎样才能让 SuperObject 按照我添加的顺序而不是它自己的顺序来序列化数据?我认为它可能按 ABC 顺序对值进行排序,但是当组合不同类型的值(字符串、整数、对象、数组等)时,它们不是按 ABC 顺序排列的。我想强制 SuperObject 按照我添加的顺序序列化数据。
我能看到的唯一解决方案是通过连接字符串手动序列化这个对象。但如果可能的话,我想避免这种情况——这就是我首先使用 SuperObject 的原因。