我有一个JObject
它被用作template用于调用 RESTful Web 服务。这JObject
通过解析器创建,并且由于它用作模板告诉用户端点架构是什么样子,所以我必须找到一种方法来保留所有属性,这就是为什么我将它们的值默认为null
。例如,该对象最初的样子是这样的:
{
"Foo":{
"P1":null,
"P2":null,
"P3":null,
"P4":{
"P1":null,
"P2":null,
"P3":null,
},
"FooArray":[
{
"F1":null,
"F2":null,
"F3":null,
}
]
},
"Bar":null
}
然后,用户可以根据需要填写各个字段,例如Foo.P2
and Foo.P4.P1
:
{
"Foo":{
"P1":null,
"P2":"hello world",
"P3":null,
"P4":{
"P1":1,
"P2":null,
"P3":null,
},
"FooArray":[
{
"F1":null,
"F2":null,
"F3":null,
}
]
},
"Bar":null
}
这意味着他们只关心这两个领域。现在我想序列化这个模板(JObject
)返回到 JSON 字符串,但只希望显示填充的那些字段。所以我尝试了这个:
string json = JsonConvert.SerializeObject(template,
new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
});
不幸的是,这不起作用。我碰到这个问题 https://stackoverflow.com/questions/29258587/newtonsoft-json-net-serialize-jobject-doesnt-ignore-nulls-even-with-the-right并意识到一个null
对象中的值是实际值JToken
类型,而不是真正的null
,这是有道理的。然而,在这种非常特殊的情况下,我需要能够摆脱这些“未使用”的字段。我尝试手动迭代节点并删除它们,但这也不起作用。请注意,我使用的唯一托管类型是JObject
;我没有一个模型来将对象转换为对象或定义属性,因为这个“模板”在运行时得到解析。我只是想知道是否有人遇到过这样的问题并有任何见解。任何帮助是极大的赞赏!