即使value为null,WCF也会确定是否将JSON密钥发送到服务器

时间:2015-03-17 13:24:44

标签: c# .net json wcf rest

我正在执行PUT请求以更新有关用户的信息。只有我在JSON请求中发送的密钥才需要修改。这很有效,但我想包括删除信息的能力。

目前,当我发送请求{"firstname": "will"}时,WCF将反序列化对象并返回数据协定。这导致对象类似于:

UserObject
    firstname => will,
    lastname => null,
    gender => null

这很好,因为我只更新非空值。但是,当我删除一个我发送的值{"firstname": null}时 - 我发送密钥的事实决定了我希望它更新的操作,省略其他键意味着它会让他们独自一人。

问题是自动反序列化给了我一个像这样的对象:

UserObject
    firstname => null,
    lastname => null,
    gender => null

我如何知道真实请求有哪些密钥才能让我更新值。我是否必须查看手动反序列化请求并循环使用值?或者有没有办法让数据联系人只给我请求的选项?

我尝试了emitDefaultValue=false,但这似乎只是为了序列化对象。

2 个答案:

答案 0 :(得分:0)

我会介绍一些User-ID。你遇到的问题是你的主键(用数据库语言)可以改变,这不是一个好主意。

id不会改变,因此您始终可以识别该对象。

答案 1 :(得分:0)

我认为这是不可能的。在您的WCF操作中,您只能获得反序列化对象,并且您只能以一种方式解释null。正如您所注意到的,无论您是否将值显式设置为null,WCF都将生成相同的对象。不发送该信息。

正如我所看到的,如果你想删除属性,你可以发送默认值。例如,对于字符串,您将发送空字符串,这样您的更新过程将正确地将值更新为空字符串,从而有效地删除它。对于其他类型,您还可以发送一些默认值。

例如:

{"firstname": ""}