JSON.NET сериализует JObject, игнорируя нулевые свойства
у меня естьJObject
который используется в качествешаблон для вызова веб-сервисов RESTful. это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
а также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
});
К сожалению, это не сработало. Я наткнулсяэтот вопрос и понял, чтоnull
значение в объекте является фактическимJToken
типа и не совсемnull
, что имеет смысл. Однако в этом особом случае мне нужно избавиться от этих «неиспользуемых» полей. Я пытался вручную перебирать узлы и удалять их, но это тоже не сработало. Обратите внимание, что единственный управляемый тип, который я использую,JObject
; У меня нет модели для преобразования объекта или определения атрибутов, так как этот «шаблон» разрешается во время выполнения. Мне просто интересно, сталкивался ли кто-нибудь с такой проблемой и имел ли он какие-то идеи. Любая помощь с благодарностью!