Quel est le moyen le plus simple pour que XmlSerializer sérialise également les propriétés privées et "public const" d'une classe ou d'une structure? Ce n'est pas tout ce qui sortira pour moi, ce sont des choses qui ne sont que publiques. Le rendre privé ou ajouter const fait que les valeurs ne soient pas sérialisées.Utilisation de XmlSerializer avec des propriétés const publiques et privées
Répondre
XmlSerializer
recherche uniquement dans les zones publiques et les propriétés. Si vous avez besoin de plus de contrôle, vous pouvez implémenter IXmlSerializable et sérialiser ce que vous voulez. Bien sûr, sérialiser une constante n'a pas beaucoup de sens puisque vous ne pouvez pas désérialiser en une constante.
Découvrez DataContractSerializer, présenté dans .NET 3.0. Il utilise également le format XML et, à bien des égards, il est meilleur que XmlSerializer, y compris en traitant des données privées. Voir http://www.danrigsby.com/blog/index.php/2008/03/07/xmlserializer-vs-datacontractserializer-serialization-in-wcf/ pour une comparaison complète.
Si vous avez seulement .NET 2.0, il y a le BinarySerializer qui peut traiter des données privées, mais bien sûr c'est un format binaire.
'Better' est discutable, par exemple , le DataContractSerializer ne vous donne aucune flexibilité sur la façon dont l'objet est sérialisé. – nicodemus13
Cela n'a aucun sens de prendre en compte const
membres, car ils ne sont pas par instance; mais si vous voulez simplement dire des membres d'instances non publiques: considérez DataContractSerializer
(.NET 3.0) - ceci est similaire à XmlSerializer
, mais peut sérialiser des propriétés non publiques (bien que ce soit "opt in").
Voir here for more.
La sérialisation de la valeur d'une constante pour un temps d'exécution particulier est très logique, si par exemple elle doit être comparée à la valeur d'une autre exécution. – Grault
@Jesdisciple pas vraiment - car encore une fois: c'est un sérialiseur d'objet (instance) - et cette valeur n'appartient pas à l'objet (instance). –
Même si il est impossible de sérialisation des propriétés privées, vous pouvez sérialiser propriétés avec un setter interne, comme celui-ci:
public string Foo { get; internal set; }
Pour ce faire, vous avez besoin d'effectuer une pré-générer l'ensemble de sérialisation avec sgen. exe, et déclarer cette assemblée comme ami:
[assembly:InternalsVisibleTo("MyAssembly.XmlSerializers")]
Une autre solution l'utilisation de Newtonsoft.Json:
var json = Newtonsoft.Json.JsonConvert.SerializeObject(new { root = result });
var xml = (XmlDocument)Newtonsoft.Json.JsonConvert.DeserializeXmlNode(json);
Bien sûr, celui-ci a malheureusement fait un détour via json.
Voici ma solution pour mettre les valeurs immuables dans une propriété qui sérialisation XML:
[XmlElement]
public string format { get { return "Acme Order Detail XML v3.4.5"; } set { } }
- 1. Utilisation interne de classe des propriétés publiques
- 2. Substitution de fonctions virtuelles publiques avec des fonctions privées en C++
- 3. Quelles sont les meilleures pratiques pour les URL publiques «privées»?
- 4. Utilisation de la bibliothèque de classes .NET 2.0 à partir du service Silverlight WCF, les propriétés publiques restent non exposées
- 5. XmlSerializer et Collection propriété avec setter privé
- 6. Méthodes Getter et Setter Versus Propriétés publiques dans FLex
- 7. Propriétés publiques héritées n'apparaissant pas dans Intellisense
- 8. Rhino Mocks - Propriétés privées sur Ctor test
- 9. Comment trouver facilement les méthodes/propriétés publiques inutilisées
- 10. Utilisez des propriétés privées ou utilisez-vous? C#
- 11. Lequel mieux gérer Versioning? XmlSerializer vs DataContractSerializer?
- 12. .net XmlSerializer, ignorer les propriétés de la classe de base
- 13. champs XmlSerializer et XmlElement
- 14. Utilisation correcte des propriétés de l'objet
- 15. XmlSerializer, sgen.exe et génériques
- 16. Fonctions VBA et privées
- 17. Utilisez-vous des membres de données ou des propriétés publiques dans la classe elle-même?
- 18. erreur C avec pointeur et const char []
- 19. Sécurité PHP: stocker les détails de connexion dans des constantes ou des propriétés privées?
- 20. Problème de désérialisation des listes génériques avec C# XmlSerializer
- 21. Utilisation des propriétés pour les types primitifs
- 22. Restriction des utilisations d'attribut uniquement pour les variables publiques et protégées C#
- 23. Afficher le diaporama des photosets privées de Flickr
- 24. Utilisation de ant pour détecter les propriétés os et set
- 25. Utilisation de propriétés indexables avec la bibliothèque i4o
- 26. Utilisation d'amis avec des classes de base pour Boost Paramètre
- 27. Utilisation des propriétés de liste déroulante dans C# NET 3.5
- 28. Utilisation correcte des propriétés lors de la gestion d'une collection
- 29. Utilisation de plusieurs fournisseurs de profils avec des propriétés de superposition
- 30. Pourquoi s'embêter avec des noms forts pour les assemblées privées?
Pourquoi vous voulez constantes être sérialisé ?! Vous semblez faire une mauvaise route. –
Par définition, les constantes exposées (c'est-à-dire publiques et protégées) sont quelque chose qui ne changera jamais. Changer une constante publique est un changement de client cassant! Pour quelque chose qui est simplement constant pour l'exécution de l'application, ou pour une version particulière de l'application, mais qui peut changer dans le futur, vous devez utiliser les champs 'readonly'. 'XmlSerializer' ne les traitera pas non plus, mais c'est une question différente. –
Si vous souhaitez sérialiser/désérialiser des membres privés, veuillez consulter http://stackoverflow.com/questions/420662/can-an-internal-setter-of-a-property-be-serialized –