我想在树中使用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
在树的中间?
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));
}
你也可以Add在JProperty
街区的phone
else
到JObject
。
您可以内联检查它并确定值应为null的位置:
using Newtonsoft.Json.Linq;
jObject jX = new JObject(
new JProperty("name" : "Amsterdam"),
new JProperty("phone", booleanfunction(x)? "1234567890": null)
);
在这方面,似乎Newtonsoft与XElements不同。那么最好避免使用null
并插入虚拟属性,或者不使用三元组?操作完全。
在这两种情况下,在构建该树之后,我们可以使用Remove(string propertyName)
来消除虚拟元素或不需要的元素。
如果有人有一个更好的解决方案,“一举”建立正确的树,欢迎!