Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 33737|Resposta: 2

[Fonte] Newtonsoft.Json ignora o recurso DataContract

[Copiar link]
Publicado em 30/05/2018 16:50:17 | | | |
Newtonsoft.JsonComo você provavelmente sabe, ferramentas de serialização e desserialização JSON são amplamente usadas

DataContratoAtributoEspecifica esse tipo para definir ou implementar um contrato de dados que pode ser serializado por um serializador como o DataContractSerializer. Para tornar um tipo serializável, o autor do tipo deve definir um contrato de dados para seu tipo.

encontrei um problema difícil,A classe pai possui o recurso [DataContract], e a classe filha herda a classe pai, e todos os atributos da subclasse precisam ser serializados e desserializados com o atributo [DataMember]Como a classe pai é uma dll encapsulada de outra pessoa, o recurso [DataContract] da classe pai não pode ser excluído!

O teste é o seguinte: a classe Test1 possui o recurso [DataContrato], se o atributo não adicionar o recurso [DataMember], isso fará com que a serialização e desserialização falham, como mostrado na figura abaixo:




Anotamos a característica [DataContract] da classe Test1 e descobrimos que ela pode ser serializada e desserializada normalmente, da seguinte forma:



Existe algum uso avançado do Newtonsoft.Json que possa ignorar esse recurso? A resposta é sim!

Basta usar a propriedade OptOut do Json.Net. Ele terá precedência sobre o DataContrato.

//
        Resumo:
        Todos os membros públicos são serializados por padrão. Membros podem ser excluídos usando Newtonsoft.Json.JsonIgnoreAttribute
        ou AtributoNãoSerializado. Esse é o padrão padrão de serialização dos membros.
        OptOut = 0,
        //
        Resumo:
        Apenas os membros rotulados Newtonsoft.Json.JsonPropertyAttribute ou System.Runtime.Serialization.DataMemberAttribute
        é serializada. Esse modo de serialização dos membros também pode ser definido por meio de marcação
        classe com System.Runtime.Serialization.DataContratoAtributo.
        OptIn = 1,
        //
        Resumo:
        Todos os campos públicos e privados são serializados. Membros podem ser excluídos usando Newtonsoft.Json.JsonIgnoreAttribute
        ou AtributoNãoSerializado. Esse padrão de serialização de membro também é aceitável
        Defina isso marcando a classe com System.SerializableAttribute e definindo o IgnoreSerializableAttribute
        Defina Newtonsoft.Json.Serialization.DefaultContractResolver como false.
        Campos = 2


Código de teste:







Anterior:MonitorDomínios de Aplicação
Próximo:. O componente de mapeamento de objetos OOM mais rápido do .NET, Tiny Mapper, na prática do projeto
Publicado em 01/06/2018 13:20:10 |
Determine se uma string json é um objeto ou um array
Newtonsoft.Json.Linq.JToken s = Newtonsoft.Json.Linq.JToken.Parse(str);

switch (s.Type.ToString())
                {
                    caso "Objeto":
                        intervalo;
                    caso "Array":
                        intervalo;
                    padrão:
                        intervalo;
                }
Publicado em 21/08/2020 11:52:32 |
Apoio: o proprietário é mestre em pedir coxas
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com