【发布时间】:2019-03-18 15:01:34
【问题描述】:
我想在这样的树中使用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?
【问题讨论】:
-
因为 json
{ "name" : "Amsterdam", null }无效......可能有效的是{ "name" : "Amsterdam"}或{ "name" : "Amsterdam", "phone" : null } -
所以如果
booleanfunction(x)的计算结果为 false,您想添加此属性new JProperty("phone", 1234567890)吗? -
@KunalMukherjee 我需要向 JObject 添加一堆 JProperty 元素。但是,一个 JProperty 只应在某些条件下包含,例如如果值不为空。使用 XElement 这个三元?运算符非常有用,但对于 Json 树似乎不可能。
-
你可以用 Linq 做到这一点
new JProperty[] { new JProperty("name" : "Amsterdam"), booleanfunction(x) ? null : new JProperty("phone", 1234567890)}.Where(x=>x !=null).ToArray() -
@Selvin 很好的解决方案,但它只适用于数组。