如何在Newtonsoft JSON树中使用零值



我想在这样的树中使用 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 phoneelse块中添加到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()); 

相关内容

  • 没有找到相关文章

最新更新