【问题标题】:Detecting the difference between null property and omitted property in JSON检测 JSON 中空属性和省略属性之间的区别
【发布时间】:2012-05-25 06:10:57
【问题描述】:

我有一个 RESTful 网络服务,它接收 JSON 并使用 DataContractJsonSerializer 将其反序列化为 c# 类,尽管这可以更改。

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

例如:

{
    "firstName" : "Martin"
}

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

但是我找不到这样做的方法,因为我不知道如何区分未指定字段和应该更新为 null 的字段

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

{}

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

{
    "firstName" : null
}

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

【问题讨论】:

    标签: c# .net json rest datacontractjsonserializer


    【解决方案1】:

    我认为你可以使用用一些随机字符串初始化的字段

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

    如果您使用 {"firstName" : null} 反序列化,则 firstName 将为空。如果你使用 {} 反序列化,名字不会改变 (some string)

    PS:如果您使用 DataContractJsonSerializer,请不要使用 DataContractDataMember 属性

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我同意你的观点,关于什么可以/不能更新,什么可以为空/不能为空仍然有规则。但是对于我允许消费者更新为 null 的字段,我仍然需要能够检测消费者决定不更新字段(即保持不变)与尝试将其更新为 null 值之间的区别。我认为 L.B.已经或多或少钉牢了它。
      猜你喜欢
      • 2011-05-31
      • 2012-10-03
      • 1970-01-01
      • 2018-11-17
      • 1970-01-01
      • 2011-06-22
      • 2012-08-27
      • 2011-02-02
      • 1970-01-01
      相关资源
      最近更新 更多