XSD.EXE + JSON.NET - Como lidar com membros gerados xxxSpecified?
Ao usar o XSD.EXE para gerar classes a partir de um esquema XML, ele gera membros xxxSpecified de quaisquer primitivas de um determinado objeto:
<xs:complexType name ="Foo">
<xs:all>
<xs:element name ="Count" type = "xs:integer"/>
</xs:all>
</xs:complexType>
.... gera:
public class Foo
{
public int Count { get; set; }
public bool CountSpecified { get; set; }
}
Parece que a versão mais recente do JSON.NET pode definir automaticamente essas propriedades ao desserializar.
string request = "{ Count : 10 }";
var object = JsonConvert.Deserialize<Foo>(request)
Assert.IsTrue(object.Count = 10); // Yup
Assert.IsTrue(object.CountSpecified == true); //Also yup - JSON.NET works!
No entanto, ao seguir o caminho inverso, as propriedades xxxSpecified são incluídas na saída JSON, o que está incorreto, pois não faz parte do esquema.
string request = JsonConvert.Serialize(object);
//{
// Count: 10,
// CountSpecified : true <-- This is incorrect - should not be output
//}
Está faltando alguma configuração que controla se os atributos xxxSpecified devem ser exibidos? Como posso suprimi-lo?
(Nota: esta é uma permutação de uma pergunta respondida aqui:
JSON.NET, XmlSerializer e propriedade "Especificada"
... mas envolve a criação de classes de extensão, o que não é possível para mim, pois existem centenas de classes no esquema e não posso alterar a hierarquia de herança. Então a resposta não vai funcionar. Procurando por outro caminho.)