Json - Erro ao deserializar json em uma lista de objetos

Delphi

29/07/2015

Bom dia Pessoal, fiz um método que recebe um json e transforma ele numa lista de objetos, porém ocorre um erro quando os objeto do json possui um atributo do tipo TList. Estou usando delphi XE6 com REST. Segue abaixo a função:


function THelper.JsonListObjeto(jsonString: String; classe: TClass): TList<TObject>;
var lista:Tlist<TObject>;
    jo: TJSONObject;
    obj: TObject;
    jl: TJSONArray;
    i:integer;
    unMarshal: TJSONUnMarshal;
begin
 lista := TList<TObject>.Create;
 jo := TJSONObject.Create;
 obj := TObject.Create;
 jl := TJSONArray.Create;
 unMarshal := TJSONUnMarshal.Create;

 jl := TJSONObject.ParseJSONValue(jsonString) as TJsonArray;

 if Assigned(jl) then
  begin
    for i := 0 to jl.Count -1 do
      begin
        jo := jl.Items[i] as TJSONObject;
        obj:= unMarshal.CreateObject(classe,jo);
        lista.Add(obj);
      end;
  end;

  result := lista;
end;



Json:
[
    {
        "kitVenda": null,
        "estDisp": 14,
        "estMax": 0,
        "custoMedio": 18.572,
        "descricao": "PRODUTO DE TESTE",
        "codigo": "194354",
        "codigosBarra": null,
        "precoVenda": 52.5,
        "estMin": 0,
        "familia": {
            "codFamilia": "",
            "descFamilia": ""
        },
        "unidadeMedida": {
            "abrevUnidade": "",
            "codUnidade": 0,
            "descUnidade": ""
        },
        "id": 0,
        "localizacao": "",
        "promocaoProd": null,
        "numerosSerie": [
            {
                "serial": "BE456466457897845645"
            },
            {
                "serial": "BE45645567878978944"
            },
            {
                "serial": "BE79794463131311344"
            },
            {
                "serial": "BE78978978944644445"
            },
            {
                "serial": "BE99998989444641116"
            },
            {
                "serial": "12312313131"
            },
            {
                "serial": "4544469797979797"
            }
        ],
        "prodBalanca": "F",
        "precoPrazo": 0,
        "marca": {
            "codMarca": "002",
            "descMarca": "SUVINIL"
        },
        "codigoNcm": {
            "percTribEst": 0,
            "percTribFed": 0,
            "percTribMun": 0,
            "codNcm": "",
            "descNcm": ""
        },
        "tipoProduto": "tpProduto",
        "grupo": {
            "codGrupo": "017",
            "descGrupo": "Diversos"
        },
        "diasVencimento": 0,
        "codAnp": "",
        "tributacao": {
            "icms": {
                "id": 0,
                "aliquota": 0,
                "baseCalc": 0
            },
            "id": 0,
            "iss": {
                "id": 0,
                "aliquota": 2,
                "percBase": 100
            },
            "pis": {
                "id": 4,
                "aliquota": 1.65,
                "cst": "50"
            },
            "cofins": {
                "id": 6,
                "aliquota": 7.6,
                "cst": "50"
            }
        }
    }
]




Chamada da função:
procedure TformPrincipal.recebeProduto;
var listaProduto:TList<TProduto>;
    produto:TProduto;
    helper:THelper;
    i:Integer;
    daoProduto:TDaoProduto;
    jsonString:String;
begin
  listaProduto := TList<TProduto>.create;
  produto:= TProduto.Create;
  daoProduto := TDaoProduto.Create;

  jsonString := memo1.Lines.Text;

  listaProduto := TList<TProduto>(helper.JsonListObjeto(jsonString,TProduto));

  for i := 0 to listaProduto.Count-1 do
    begin
      produto := listaProduto.Items[i];
      daoProduto.save(produto);

    end;
end;



Ocorre esse erro:
[img:descricao=Mensagem de erro]http://arquivo.devmedia.com.br/forum/imagem/437007-20150729-173834.jpg[/img]
Danilo Pereira

Danilo Pereira

Curtidas 0
POSTAR