Delphi XE 6使用System.JSON方法和实现失败

时间:2014-05-06 19:26:03

标签: json delphi delphi-xe6 system.json

我在Delphi XE6中创建了一个简单的测试应用程序,我想开始使用Delphi的JSON来处理来自自定义编码Web服务器的请求(我很忙)

procedure TForm1.Button1Click(Sender: TObject);
var
  Servermethods : TServerMethods1Client;
  JsonArray : TJSONArray;
  JsonValue: TJSONValue;
  JSonObj: TJSONObject;
  JSPair: TJSONPair;
  s: String;
begin
  JSonObj := TJSONObject.Create;
  JSonObj.AddPair(TJSONPair.Create('a','abcde'));
  JsonArray := TJSONArray.Create;
  JsonArray.AddElement(JSonObj);

  JsonValue := JsonArray.Items[0];
  JSonObj := (JsonValue as TJSONObject);

  JSPair := TJSONPair(JSonObj);

  s := JSPair.JsonString.Value;
end;

当您检查/评估任何JSON对象(CTRL + F7)时,根本没有信息,在检查器中我只是得到"()" - [又名空] -

但是为了论证,如果我改变对JSONObj.Tostring的调用,我会得到完整的json字符串({" a"," abcde"}),这样很酷但是很酷它到达最后一行

s := JSPair.JsonString.Value;

轰!访问违规。

任何帮助将不胜感激

*编辑* 我真的要求我让某人在XE6中测试这个,看看它是不是一个错误?或者我错过了一些非常明显的东西?

2 个答案:

答案 0 :(得分:2)

JSONPair是JSONObject的一部分,因此您无法将JSONObject强制转换为JSONPair。使用JSONObject.Get获取该对。

答案 1 :(得分:0)

在我看来,你也在向TJSONPair投射TJSONValue。

最后几行将独立的TJSONValue对象分配给JSONObj。 然后将其转换为JSONPair。 (以不安全的方式 - 然后没有运行时类型兼容性检查)。 我认为这里的值只是一对中的一个成员,并且与其他成员不兼容。

您可以尝试使用" as"在这种情况下,操作员可能会更容易发现这些功能。

  

JSPair:= JSonObj as TJSONPair;

应该在运行时抱怨类型转换问题。

它也会告诉我说这些课程是否真的坐在不同的长椅上是对的。类继承树,以及您的访问冲突。