JSONMarshal:是否可以序列化/解析为'普通'JSON(没有元数据)?

时间:2015-05-20 13:29:34

标签: json web-services delphi serialization delphi-xe7

我正在编写一个DataSnap Rest Client(在Delphi中),我想要它提供 json格式的数据到很多平台(如C#,java,C ++,Delphi)。 我正在使用TJsonMarshal来序列化对象。我正在使用一些东西 类似于:

marshal := TJSONMarshal.Create(TJSONConverter.create);
jsonString := marshal.marshal(myObject).ToString;

但是当我这样做时,生成的JSON就是这样的:

{"type":"WJsonObj.TWPedido","id":1,"fields":
  {"Numero":1234,"Data":41606.7632623727,"VlrTotal":2543,
  "Produtos":
    [{"type":"WJsonObj.TWProdutoPedido","id":2,"fields":
      {"Codigo":"P001","Descr":"Computador","Qtde":1,"VrUnitario":1500}},

...

      {"type":"WJsonObj.TWProdutoPedido","id":4,"fields":
        {"Codigo":"P003","Descr":"Projetor","Qtde":1,"VrUnitario":745}}
    ]
  }
}

我想要简单的JSON,没有元数据('type''id''fields'),所以我 在非Delphi平台上不会有额外的json解析。有办法吗? 强制TJsonMarshal序列化为“普通”JSON?

1 个答案:

答案 0 :(得分:4)

您应该使用System.JSONREST.JSON代替Data.DBXJsonData.DBXJSONReflect

var
  foo, newfoo: TFoo;
  s: string;

  foo := TFoo.Create;
  s := TJson.ObjectToJsonString(foo);

  newfoo := TJson.JsonToObject<TFoo>(s);