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; У меня нет модели для преобразования объекта или определения атрибутов, так как этот «шаблон» разрешается во время выполнения. Мне просто интересно, сталкивался ли кто-нибудь с такой проблемой и имел ли он какие-то идеи. Любая помощь с благодарностью!

Ответы на вопрос(3)

Ваш ответ на вопрос