您的位置:首页 > 编程语言 > Delphi

Delphi XE DBX 序列化Json的bug

2012-02-23 16:40 706 查看
delphi XE Update1 15.0.3953.35171

序列化一个阵列,如下:

procedure TForm1.Button2Click(Sender: TObject);
var
  vObject:TJsonObject;
  vPair:TJsonPair;
begin
  vObject:=TJsonObject.Create();
  vPair:=TJsonPair.Create('Name','A"B\''C中国');
  vObject.AddPair(vPair);
  Edit1.Text:=vObject.ToString;
end;

得到的结果为:{"Name":"A"B\'C中国"}

很明显结果是错的,双引号没有转义。查找代码,发现是这个地方的错误:

DBXJSON.pas
function TJSONString.ToString: UnicodeString;
begin
  if FStrBuffer <> nil then
    Exit('"' + FStrBuffer.ToString + '"');
  Result := NullString;
end;

居然QuotedStr函数都没有用,更别谈斜杠的转义。

在Delphi XE2 update 3 16.0.4358.45540 版本,发现代码修改了:

function TJSONString.ToString: UnicodeString;
begin
  if FStrBuffer <> nil then
    Exit('"' + AnsiReplaceStr(FStrBuffer.ToString, '"', '\"') + '"');
  Result := NullString;
end;

这次把引号转义了,但是还有问题:如果里面本身已经有斜杠了,难道不用转义??哎,头继续大。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: