C# 使用json从字符串反序列化对象之后。如何知道结果空值之间的差异?
当json中的某个项的值为null时,您如何知道差异。或者如果值根本不在json中。在Entityobject中,两者都将以null结束。(编造) 现在文档当然也将是空的。但我怎么知道两者的区别呢?为了澄清,我不能预先设置其他值。实际上,我更喜欢一个更好的答案:只需创建另一个对象,作为其他初始值,然后为null。此外,我仍然希望在json中发送null。因此,我也不能发送另一个值(比如“delete”之类),然后将其设为空。 因此,结束这个问题:我想知道json中给定的null与由于json字符串中不包含null而发生的null之间的区别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字符
希望这足够清楚。提前感谢:)这不是很简单,但您可以精心设计对象,以便调用属性的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;
}