Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 33737|Répondre: 2

[Source] Newtonsoft.Json ignore la fonctionnalité DataContract

[Copié le lien]
Publié sur 30/05/2018 16:50:17 | | | |
Newtonsoft.JsonComme vous le savez probablement, les outils de sérialisation et de désérialisation JSON sont couramment utilisés

DataContractAttributeSpécifie ce type pour définir ou implémenter un contrat de données pouvant être sérialisé par un sérialiseur tel que DataContractSerializer. Pour rendre un type sérialisable, l’auteur du type doit définir un contrat de données pour son type.

rencontré un problème difficile,La classe parente possède la caractéristique [DataContract], et la classe enfant hérite de la classe parente, et tous les attributs de la sous-classe doivent être sérialisés et désérialisés avec l’attribut [DataMember]Puisque la classe mère est la DLL encapsulée de quelqu’un d’autre, la fonctionnalité [DataContract] de la classe parente ne peut pas être supprimée !

Le test est le suivant : la classe Test1 possède la fonctionnalité [DataContract], si l’attribut n’ajoute pas la caractéristique [DataMember], cela provoquera l’échec de la sérialisation et de la désérialisation, comme montré dans la figure ci-dessous :




Nous avons annoté la fonctionnalité [DataContract] de la classe Test1 et constaté qu’elle peut être sérialisée et désérialisée normalement, comme suit :



Existe-t-il une utilisation avancée de Newtonsoft.Json qui pourrait ignorer cette fonctionnalité ? La réponse est oui !

Utilisez simplement la propriété OptOut de Json.Net. Il aura priorité sur le DataContract.

//
        Résumé :
        Tous les membres publics sont sérialisés par défaut. Les membres peuvent être exclus en utilisant Newtonsoft.Json.JsonIgnoreAttribute
        ou System.NonSerializedAttribute. C’est le schéma de sérialisation par défaut des membres.
        OptOut = 0,
        //
        Résumé :
        Seuls les membres identifiés Newtonsoft.Json.JsonPropertyAttribute ou System.Runtime.Serialization.DataMemberAttribute
        est sérialisée. Ce mode de sérialisation des membres peut également être défini par balisage
        classe avec System.Runtime.Serialization.DataContractAttribute.
        OptIn = 1,
        //
        Résumé :
        Tous les champs publics et privés sont sérialisés. Les membres peuvent être exclus en utilisant Newtonsoft.Json.JsonIgnoreAttribute
        ou System.NonSerializedAttribute. Ce schéma de sérialisation des membres est également correct
        Définissez cela en taguant la classe avec System.SerializableAttribute et en définissant l’IgnoreSerializableAttribute
        Régler Newtonsoft.Json.Serialization.DefaultContractResolver sur false.
        Champs = 2


Code de test :







Précédent:Surveiller les domaines d’application
Prochain:. Le composant de cartographie d’objets OOM le plus rapide de .NET, Tiny Mapper, en pratique de projet
Publié sur 01/06/2018 13:20:10 |
Déterminer si une chaîne json est un objet ou un tableau
Newtonsoft.Json.Linq.JToken s = Newtonsoft.Json.Linq.JToken.Parse(str) ;

switch (s.Type.ToString())
                {
                    cas « Objet » :
                        pause ;
                    cas « Array » :
                        pause ;
                    Par défaut :
                        pause ;
                }
Publié sur 21/08/2020 11:52:32 |
Soutien : le propriétaire est un maître pour demander des cuisses
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com