Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用json从字符串反序列化对象之后。如何知道结果空值之间的差异?_C#_Asp.net_Json_Json.net - Fatal编程技术网

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

C# 使用json从字符串反序列化对象之后。如何知道结果空值之间的差异?,c#,asp.net,json,json.net,C#,Asp.net,Json,Json.net,当json中的某个项的值为null时,您如何知道差异。或者如果值根本不在json中。在Entityobject中,两者都将以null结束。(编造) 现在文档当然也将是空的。但我怎么知道两者的区别呢?为了澄清,我不能预先设置其他值。实际上,我更喜欢一个更好的答案:只需创建另一个对象,作为其他初始值,然后为null。此外,我仍然希望在json中发送null。因此,我也不能发送另一个值(比如“delete”之类),然后将其设为空。 因此,结束这个问题:我想知道json中给定的null与由于json字符

当json中的某个项的值为null时,您如何知道差异。或者如果值根本不在json中。在Entityobject中,两者都将以null结束。(编造)

现在文档当然也将是空的。但我怎么知道两者的区别呢?为了澄清,我不能预先设置其他值。实际上,我更喜欢一个更好的答案:只需创建另一个对象,作为其他初始值,然后为null。此外,我仍然希望在json中发送null。因此,我也不能发送另一个值(比如“delete”之类),然后将其设为空。 因此,结束这个问题:我想知道json中给定的null与由于json字符串中不包含null而发生的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
,则指定的
Bar
将为true,否则为false

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


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

您可以为
EntityObject
中的每个字段设置默认值。这样,您可以确保如果值真的等于
null
,那么它是显式分配的
null

例如(C#5):

在C#6中更容易:


您是否只想测试特定的JSON字符串是否具有该属性?或者您还想反序列化为
Entityobject
?答案不错,值得学习。我来试试这个和另一个答案。也许回答我自己或者接受你们中的一个:)就像我说的,我其实不想这么做。。。但也许这仍然是最好的解决方案。我将尝试一些东西,也许回答我自己或者接受你们中的一个:)。是的,我注意到了,但我不确定在这种情况下你们有多少选择。如果不使用默认值,Thomas Levesque的答案似乎是最好的选择。
String json = "{ 
randomstr = null,
randomint = 1
}"
class Foo
{
    private string _bar;
    public string Bar
    {
        get { return _bar; }
        set
        {
            _bar = value;
            BarSpecified = true;
        }
    }

    [JsonIgnore]
    public bool BarSpecified { get; set; }
}
public class Entityobject
{
    private Document _document = Document.EmptyDocument;
    public Document document
    {
        get
        {
            return _document;
        }
        set
        {
            _document = value;
        }
    }

    private int? _randomint = 0;
    public int? randomint
    {
        get
        {
            return _randomint;
        }
        set
        {
            _randomint = value;
        }
    }

    private string _randomstr = String.Empty;
    public string randomstr
    {
        get
        {
            return _randomstr;
        }
        set
        {
            _randomstr = value;
        }
    }
}
public class Entityobject
{
    public Document document { get; set; } = Document.EmptyDocument;
    public int randomint { get; set; } = 0;
    public string randomstr{ get; set; } = String.Empty;
}