Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 33737|Respuesta: 2

[Fuente] Newtonsoft.Json ignora la función DataContract

[Copiar enlace]
Publicado en 30/5/2018 16:50:17 | | | |
Newtonsoft.JsonComo probablemente sepas, las herramientas de serialización y deserialización JSON se usan comúnmente

DataContractAttributeEspecifica ese tipo para definir o implementar un contrato de datos que puede ser serializado por un serializador como DataContractSerializer. Para que un tipo sea serializable, el autor del tipo debe definir un contrato de datos para su tipo.

me encontré con un problema difícil,La clase madre tiene la característica [DataContract], y la clase hija hereda la clase madre, y todos los atributos de la subclase deben ser serializados y deserializados con el atributo [DataMember]Dado que la clase madre es una DLL encapsulada de otra persona, la función [DataContract] de la clase madre no puede ser eliminada.

La prueba es la siguiente: la clase Test1 tiene la característica [DataContract], si el atributo no añade la característica [DataMember], provocará fallos en la serialización y deserialización, como se muestra en la figura siguiente:




Anotábamos la característica [DataContract] de la clase Test1 y comprobamos que puede ser serializada y deserializada normalmente, de la siguiente manera:



¿Existe algún uso avanzado de Newtonsoft.Json que pueda ignorar esta función? ¡La respuesta es sí!

Simplemente usa la propiedad de OptOut de Json.Net. Tendrá prioridad sobre el DataContract.

//
        Resumen:
        Todos los miembros públicos se serializan por defecto. Los miembros pueden ser excluidos usando Newtonsoft.Json.JsonIgnoreAttribute
        o AtributoSistema.NonSerialized. Este es el patrón predeterminado de serialización de miembros.
        OptOut = 0,
        //
        Resumen:
        Solo los miembros etiquetados como Newtonsoft.Json.JsonPropertyAttribute o System.Runtime.Serialization.DataMemberAttribute
        es serializada. Este modo de serialización de miembros también puede establecerse mediante etiquetado
        con System.Runtime.Serialization.DataContractAttribute.
        OptIn = 1,
        //
        Resumen:
        Todos los campos públicos y privados están serializados. Los miembros pueden ser excluidos usando Newtonsoft.Json.JsonIgnoreAttribute
        o AtributoSistema.NonSerialized. Este patrón de serialización de miembros también está bien
        Configúralo etiquetando la clase con System.SerializableAttribute y configurando el IgnoreSerializableAttribute
        Configura Newtonsoft.Json.Serialization.DefaultContractResolver en false.
        Campos = 2


Código de prueba:







Anterior:MonitorDomainsAppDomains
Próximo:. El componente de mapeo de objetos OOM más rápido de .NET, Tiny Mapper, en la práctica del proyecto
Publicado en 1/6/2018 13:20:10 |
Determinar si una cadena json es un objeto o un array
Newtonsoft.Json.Linq.JToken s = Newtonsoft.Json.Linq.JToken.Parse(str);

switch (s.Type.ToString())
                {
                    caso "Objeto":
                        pausa;
                    caso "Array":
                        pausa;
                    Por defecto:
                        pausa;
                }
Publicado en 21/8/2020 11:52:32 |
Apoyo El casero es un maestro en pedir muslos
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com