JSON.NET serializa JObject mientras ignora las propiedades nulas

tengo unJObject que se usa comomodelo para llamar a servicios web RESTful. EstaJObject se crea a través de un analizador y dado que se usa como una plantilla que le dice al usuario cómo se ve el esquema de punto final, tuve que encontrar una manera de preservar todas las propiedades, por lo que estoy omitiendo sus valoresnull. Como ejemplo, así es como se ve originalmente el objeto:

{  
   "Foo":{  
      "P1":null,
      "P2":null,
      "P3":null,
      "P4":{  
         "P1":null,
         "P2":null,
         "P3":null,
      },
      "FooArray":[  
         {  
            "F1":null,
            "F2":null,
            "F3":null,
         }
      ]
   },
   "Bar":null
}

El usuario puede completar los campos individuales según lo necesite, comoFoo.P2 yFoo.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
}

lo que significa que solo se preocupan por esos dos campos. Ahora quiero serializar esta plantilla (JObject) de vuelta a una cadena JSON, pero solo desea que aparezcan los campos que se rellenan. Entonces intenté esto:

string json = JsonConvert.SerializeObject(template,
    new JsonSerializerSettings
    {
        NullValueHandling = NullValueHandling.Ignore
    });

Lamentablemente, esto no funcionó. Me encontré conesta pregunta y me di cuenta de que unnull el valor en el objeto es un valor realJToken escriba y no realmente unnull, lo cual tiene sentido. Sin embargo, en este caso muy particular, necesito poder deshacerme de estos campos "no utilizados". Intenté iterar manualmente sobre los nodos y eliminarlos, pero tampoco funcionó. Tenga en cuenta que el único tipo administrado que estoy usando esJObject; No tengo un modelo para convertir el objeto o definir atributos, ya que esta "plantilla" se resuelve en tiempo de ejecución. Me preguntaba si alguien ha encontrado un problema como este y tiene alguna idea. ¡Cualquier ayuda es muy apreciada!

Respuestas a la pregunta(3)

Su respuesta a la pregunta