如何在NewtonSoft JSON树中使用NULL值?

问题描述 投票:-1回答:3

我想在树中使用null值,如下所示:

using Newtonsoft.Json.Linq;
jObject jX = new JObject(
  new JProperty("name" : "Amsterdam"),
  booleanfunction(x) ?
    null
    :
    new JProperty("phone", 1234567890)
);

null似乎导致运行时异常Can not add Newtonsoft.Json.Linq.JValue to Newtonsoft.Json.Linq.JObject

我觉得这很可惜,因为我习惯和XElement树做类似的事情,就像这样:

using System.Xml.Linq;
XElement Xvar =
  new XElement("div",
    _IsInvoice ? 
      null
      :
      new XElement("p", "sometext")
  );

那么为什么使用XElement可以正常工作,而不是使用Newtonsoft,或者我如何才能将它与Newtonsoft一起使用呢?

问题还可能是:

如何使用Linq在树中有条件地添加元素?没有三元运算符(x?y:z),只有if在树的中间?

c# null json.net
3个回答
0
投票

JObject在它的构造函数中不接受null。您可以通过将代码更改为以下内容来解决此问题:

using Newtonsoft.Json.Linq;
jObject jX;
if(booleanfunction(x)) {
    jX = new JObject(new JProperty("name" : "Amsterdam"));
} else {
    jX = new JObject(new JProperty("name" : "Amsterdam"), new JProperty("phone", 1234567890));
}

你也可以AddJProperty街区的phone elseJObject


0
投票

您可以内联检查它并确定值应为null的位置:

using Newtonsoft.Json.Linq;
jObject jX = new JObject(
  new JProperty("name" : "Amsterdam"),
    new JProperty("phone", booleanfunction(x)? "1234567890": null)
);

0
投票

在这方面,似乎Newtonsoft与XElements不同。那么最好避免使用null并插入虚拟属性,或者不使用三元组?操作完全。

在这两种情况下,在构建该树之后,我们可以使用Remove(string propertyName)来消除虚拟元素或不需要的元素。

如果有人有一个更好的解决方案,“一举”建立正确的树,欢迎!

© www.soinside.com 2019 - 2024. All rights reserved.