У меня есть JObject
, который используется как шаблон для вызова веб-сервисов RESTful. Этот JObject
создается через синтаксический анализатор, и поскольку он используется в качестве шаблона, указывающего пользователю, как выглядит схема конечных точек, мне нужно было выяснить способ сохранения всех свойств, поэтому я по умолчанию делю их значения на null
. В качестве примера, это то, что объект изначально выглядит следующим образом:JSON.NET сериализует JObject при игнорировании нулевых свойств
{
"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
; У меня нет модели для преобразования объекта или определения атрибутов, поскольку этот «шаблон» разрешается во время выполнения. Мне просто было интересно, если кто-нибудь столкнулся с такой проблемой, и у нее есть какие-то идеи. Любая помощь очень ценится!
Спасибо! Я придумал почти аналогичный алгоритм вскоре после размещения вопроса, но ваш ответ по-прежнему действителен :) – PoweredByOrange
Нет проблем; Рад, что смог помочь. –
Я застрял, пытаясь добиться этого, спасибо за ваш вклад, он работает! –