我想在这样的树中使用 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
我觉得这很可惜,因为我习惯于与Xlement的树相似,因此:
using System.Xml.Linq;
XElement Xvar =
new XElement("div",
_IsInvoice ?
null
:
new XElement("p", "sometext")
);
那么,为什么这与Xlement可以很好地工作,而不是与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));
}
您也可以将JProperty
phone
在else
块中添加到JObject
。
您可以对其进行检查并确定值应为null的位置:
using Newtonsoft.Json.Linq;
jObject jX = new JObject(
new JProperty("name" : "Amsterdam"),
new JProperty("phone", booleanfunction(x)? "1234567890": null)
);
在这方面,纽顿夫人似乎与Xlements不同。因此,最好避免使用null
,然后插入虚拟属性,或者不使用三元属性?完全操作。
在两种情况下,在建造该树后,我们都可以使用Remove(string propertyName)
摆脱虚拟元素或不需要的元素。
如果某人有更好的解决方案来建立正确的树"一个笔触",请欢迎!
为了将属性设置为null,您可以使用JValue.CreateNull()
。
为此JSON:
{ "test": null }
你做:
using Newtonsoft.Json.Linq;
var jsonObject = new JObject();
jsonObject.Add(new JProperty("test", JValue.CreateNull());