【发布时间】:2015-10-08 23:09:04
【问题描述】:
我有一个JObject,用作调用 RESTful Web 服务的模板。这个JObject 是通过解析器创建的,因为它被用作告诉用户端点架构是什么样子的模板,所以我必须想办法保留所有属性,这就是为什么我将它们的值默认为@987654324 @。例如,这是对象最初的样子:
{
"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 和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
});
很遗憾,这不起作用。我遇到this question 并意识到对象中的null 值是实际的JToken 类型,而不是真正的null,这是有道理的。但是,在这种非常特殊的情况下,我需要能够摆脱这些“未使用”的字段。我尝试手动迭代节点并删除它们,但这也不起作用。请注意,我使用的唯一托管类型是JObject;我没有将对象转换为或定义属性的模型,因为此“模板”在运行时被解析。我只是想知道是否有人遇到过这样的问题并有任何见解。非常感谢任何帮助!
【问题讨论】:
标签: c# json json.net nsjsonserialization