检测JSON中的null属性和省略属性之间的区别

我有一个接收JSON的RESTful Web服务,它使用DataContractJsonSerializer将它反序列化为一个C#类,尽管这可以改变。

其目的是更新资源上的字段

例如。:

{
    "firstName" : "Martin"
}

我不一定要更新所有的字段,我希望找到一种方法来检测JSON中未指定的字段。

但我找不到一种方法,因为我不知道如何区分未指定的字段和应更新为空的字段

例如:(不要更新任何字段):

{}

vs :(将firstName字段更新为null)

{
    "firstName" : null
}

解决这个问题的最好方法是什么?

1
额外 编辑
意见: 1

2 答案

我想你可以用一些随机字符串来初始化一个字段

public class TestClass
{
    public string firstName = "some string";
}

如果使用 {“firstName”:null} 反序列化,则firstName将为null。如果使用 {} 反序列化,则firstName不会更改(某个字符串

PS:如果您使用的是DataContractJsonSerializer,则不要使用 DataContractDataMember 属性

1
额外

我不确定谁在使用您的网络服务,但这听起来像是您应该决定的事情,然后告诉您的消费者它是如何工作的(而不是依赖消费者做对)。我认为将所有字段 或不能设置为null是不明智的,因此每个实例的处理方式都会有所不同。

0
额外
我同意你的观点,并且还有关于什么可以/不可以更新的规则,什么是可以/不可以为空。但是,对于允许消费者更新为空的字段,我仍然需要能够检测到消费者决定不更新字段(即保持不变)与尝试将其更新为空值之间的差异。我认为L.B.已经或多或少的钉住了它。
额外 作者 Martin Booth,