c# - 使用 json 从字符串反序列化对象之后。您如何知道结果空值之间的差异?

标签 c# asp.net json json.net

当 json 中的某个项目的值为 null 时,如何知道差异。或者如果该值根本不在 json 中。两者最终在 Entityobject 中都将为 null。 (编的)

public class Entityobject
    {
        public Document document { get; set; }
        public int randomint { get; set; }
        public string randomstr{ get; set; }
    }

Entityobject entity_obj= JsonConvert.DeserializeObject<Entityobject>(json);

例如,如果 json 是:

String json = "{ 
randomstr = null,
randomint = 1
}"

现在文档当然也将为空。但我怎么知道其中的区别呢?需要澄清的是,我无法预先设置其他值。我实际上更喜欢一个更好的答案:只需创建另一个对象,将其作为其他初始值然后为空。另外我仍然想在 json 中发送 null。所以我也不能发送另一个值(如“删除”等)并随后将其设置为空。 所以结束这个问题:我想知道 json 中给出的 null 和因为它不包含在 json 字符串中而发生的 null 之间的区别。

希望这已经足够清楚了。预先感谢您:)

最佳答案

这不是很简单,但您可以构造对象,以便调用属性的 setter 来设置属性的另一个字段:

class Foo
{
    private string _bar;
    public string Bar
    {
        get { return _bar; }
        set
        {
            _bar = value;
            BarSpecified = true;
        }
    }

    [JsonIgnore]
    public bool BarSpecified { get; set; }
}

如果 JSON 中存在 Bar,则 BarSpecified 将为 true,否则将为 false。

请注意,名称 BarSpecified 不是随机选择的;后缀 Specified 对于 JSON.NET(以及 XmlSerializer)具有特殊含义:它控制属性是否被序列化。

因此,如果反序列化该对象并再次序列化它,新的 JSON 将与原始 JSON 相同(就该属性是否存在于 JSON 而言)。

关于c# - 使用 json 从字符串反序列化对象之后。您如何知道结果空值之间的差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34933758/

相关文章:

c# - 序列化空引用对象

c# - C# .NET 中的显式字符串是否对框架更有效?

jquery - 使用 jquery 的 ajax 或 getJSON 回调在 IE 上有效的 json 仍然失败

javascript - 使用 Jquery 确定 Json feed 状态和数据有效性

ios - Swift NSJSONSerialization.JSONObjectWithData() 无法仅读取 "OK"字符串的数据

c# - 对标记为 ASCII 的 EXIF 属性使用 UTF8 解码是否安全?

c# - 一个可以分解三元表达式的工具

php - 为什么 Post/Redirect/Get 模式(PRG 模式)有效?

c# - 变量在其他上下文中为空 C# Windows 窗体

c# - 不是由按钮触发的事件