相关疑难解决方法(0)

Newtonsoft Json.Net序列化JObject不会忽略空值,即使使用正确的设置也是如此

我正在尝试使用Newtonsoft Json.Net序列化对象.

这个对象是一个匿名类型,充满了很多异类的东西,主要是普通的POCO,还有一些JObjects或JArrays.

问题是,在添加NullValueHandling属性时NullValueHandling.Ignore,每个null属性都会被忽略,但前提是它只是"常规".Net对象的一部分.内部JObjectJArray遗留的每个null属性.

这是一个最小的例子:

var jobj = JObject.FromObject(new Anything{
    x = 1,
    y = "bla",
    z = null
});

var poco = new Foo {
   foo1 = "bar",
   foo2 = null
};

var serialized = JsonConvert.SerializeObject(new {
    source1 = poco,
    source2 = jobj
}, Newtonsoft.Json.Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore});
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法可以忽略这些空值?我错过了一些设置选项吗?或者我必须手动处理它?

c# json json.net

9
推荐指数
1
解决办法
7932
查看次数

如何检查 json 中是否存在嵌套键?

我有以下if声明可以正常工作:

if (json1.ContainsKey("key2"))
{
    // do something here.
}
Run Code Online (Sandbox Code Playgroud)

json1 包含以下内容:

{
  "key1": {
    "key1_1": "value1_1",
    "key1_2": "value1_2",
    "key1_3": [
      "value1_3_2",
      "value1_3_2"
    ],
    "key1_1": "value1_1"
  },
  "key2": "value2_1",
  "key3": "value3_1"
}
Run Code Online (Sandbox Code Playgroud)

我可以从这样的键中获取特定值:

  1. console.writeline(json1["key2"]);

  2. console.writeline(json1["key1"]["key1_3"][0]);

我现在正在尝试检查是否key1_3存在,但不知道如何进行。

我尝试了以下代码示例,但它们不起作用:

if (json1.ContainsKey("key1_3"))
{
    // do something here.
}

if (json1["key1"].ContainsKey("key1_3"))
{
    // do something here.
}
Run Code Online (Sandbox Code Playgroud)

如何检查嵌套键是否存在,例如 key1_3

.net c# json

3
推荐指数
2
解决办法
466
查看次数

JSON.NET:当键包含点时获取嵌套值?

我想使用 JSON.NET 访问嵌套值。我知道我可以使用该.SelectToken()方法来访问嵌套值(例如,请参阅此问题此问题)。我的问题是我尝试访问的 JSON 的键中带有点:

var json = @"
{
  ""data.dot"": {
    ""value"": 5,
  }
}";

var jo = JObject.Parse(json);
Console.WriteLine(jo.SelectToken("data.dot.value")); // <-- doesn't work
Run Code Online (Sandbox Code Playgroud)

c# json.net

2
推荐指数
1
解决办法
1578
查看次数

标签 统计

c# ×3

json ×2

json.net ×2

.net ×1