我正在尝试使用Newtonsoft Json.Net序列化对象.
这个对象是一个匿名类型,充满了很多异类的东西,主要是普通的POCO,还有一些JObjects或JArrays.
问题是,在添加NullValueHandling属性时NullValueHandling.Ignore,每个null属性都会被忽略,但前提是它只是"常规".Net对象的一部分.内部JObject或JArray遗留的每个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)
是否有一种简单的方法可以忽略这些空值?我错过了一些设置选项吗?或者我必须手动处理它?
我有以下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)
我可以从这样的键中获取特定值:
console.writeline(json1["key2"]);
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
我想使用 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)