我尝试反序列化来自Web服务的JSON响应。响应的形式是类型良好的对象数组。作为一个例子,我使用songster.com。
在下面的代码中,TSongsterResponse
显然是不正确的,因为我得到的是一个集合,但是array of TSongsterResponse
和TSongsterList
都不会编译。
interface
type
TSongsterResponse = class
public
id: integer;
title: string;
end;
type TSongsterList = array of TSongsterResponse;
implementation
procedure Sample(AJson: string);
begin
// What goes here to get an array of TSongsterResponse?
FSomething := TJson.JsonToObject<?????>(RESTResponse1.Content);
end;
1条答案
按热度按时间j91ykkif1#
TJson.JsonToObject()
,顾名思义,需要一个对象类型,而不是数组类型。它有一个泛型约束class, constructor
,这意味着它必须能够将对象Create
反序列化到其中。它不能反序列化不在JSON对象内部的JSON数组。您可以尝试用
'{...}'
PackageRESTResponse1.Content
,否则您可能不得不转而使用TJSONObject.ParseJSONValue()
并自己手动构建TSongsterList
(请参见Delphi parse JSON array or array)。查看正在解析的实际JSON会有所帮助,但是您可以定义自己的类类型来将JSON值复制到其中。例如:
话虽如此,但请注意
TRESTResponse
有一个JSONValue
属性,可以为您解析接收到的JSON内容,例如: