【发布时间】:2016-06-07 09:42:47
【问题描述】:
除了为每个字段编写自己的还原器之外,还有其他方法可以跟踪未编组的内容吗?
我正在根据 json 消息更新我的本地数据,我的问题是(简化):
我期待 json 像
{ "items": [ { "id":1, "name":"foobar", "price":"12.34" } ] }
然后由
将其解组为 TItems 类UnMarshaller.TryCreateObject( TItems, TJsonObject( OneJsonElement ), TargetItem )
我的问题是我无法区分
{ "items": [ { "id":1, "name":"", "price":"12.34" } ] }
和
{ "items": [ { "id":1, "price":"12.34" } ] }
在这两种情况下,名称都是空白的,我只想更新那些通过 json 消息传递的字段。当然我可以为每个字段创建一个reverted,但是有很多字段和消息,所以它非常庞大。
我试图查看 REST.Jsonreflect.pas 源代码,但没有任何意义。
我使用的是delphi 10。
【问题讨论】:
-
在 JSON 规范中,空值和空字符串是有区别的。你到底想要什么?
-
感谢您的回复。在这个例子中,我不知道名称字段是否真的存在于 json 中。这是因为客户端应用程序仅在 json 中发送关键字段和修改字段。而且因为 Unmarshaller 遍历类字段,所以永远不会调用属性设置器。我想知道我是否可以以某种方式自定义解组器。我查看了源代码并注意到有 JsonReflectAttribute 属性,但我无法理解如何使用它。
标签: json delphi datasnap delphi-10-seattle