我正在执行PUT
请求以更新有关用户的信息。只有我在JSON
请求中发送的密钥才需要修改。这很有效,但我想包括删除信息的能力。
目前,当我发送请求{"firstname": "will"}
时,WCF将反序列化对象并返回数据协定。这导致对象类似于:
UserObject
firstname => will,
lastname => null,
gender => null
这很好,因为我只更新非空值。但是,当我删除一个我发送的值{"firstname": null}
时 - 我发送密钥的事实决定了我希望它更新的操作,省略其他键意味着它会让他们独自一人。
问题是自动反序列化给了我一个像这样的对象:
UserObject
firstname => null,
lastname => null,
gender => null
我如何知道真实请求有哪些密钥才能让我更新值。我是否必须查看手动反序列化请求并循环使用值?或者有没有办法让数据联系人只给我请求的选项?
我尝试了emitDefaultValue=false
,但这似乎只是为了序列化对象。
答案 0 :(得分:0)
我会介绍一些User-ID。你遇到的问题是你的主键(用数据库语言)可以改变,这不是一个好主意。
id不会改变,因此您始终可以识别该对象。
答案 1 :(得分:0)
我认为这是不可能的。在您的WCF操作中,您只能获得反序列化对象,并且您只能以一种方式解释null。正如您所注意到的,无论您是否将值显式设置为null,WCF都将生成相同的对象。不发送该信息。
正如我所看到的,如果你想删除属性,你可以发送默认值。例如,对于字符串,您将发送空字符串,这样您的更新过程将正确地将值更新为空字符串,从而有效地删除它。对于其他类型,您还可以发送一些默认值。
例如:
{"firstname": ""}