J'ai une classe avec quelques collections, et je voudrais sérialiser les instances de cette classe en XML sans avoir à initialiser les collections pour être vides, et sans avoir à implémenter IXmlSerializable. Je m'en fiche si cela crée des éléments vides, ou ne crée pas les éléments du tout. Juste que cela fonctionne sans avoir à initialiser une collection pour chaque propriété basée sur la collection.Sérialisation XML .NET et collections nulles
J'ai regardé tous les attributs XML que je peux décorer les propriétés, et je n'ai pas eu de succès avec ça. Cela semble être une chose simple à faire qui peut avoir un élément ou tout simplement aucun. Ensuite, quand il est désérialisé, il les laisse simplement nuls ou les ignore.
Voici une version simple d'une classe à utiliser pour résoudre ce problème. En utilisant ceci et les valeurs par défaut, vous obtenez une exception "Référence d'objet non définie sur une instance d'un objet" en raison de la nullité des collections;
public class MyClass
{
public string Name { get; set; }
public bool IsAlive { get; set; }
public List<Car> Cars { get; set; }
public List<Home> Homes { get; set; }
public List<Pet> Pets { get; set; }
public void ToXmlFile(string fileName)
{
XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
TextWriter writer = new StreamWriter(fileName);
serializer.Serialize(writer, this);
writer.Close();
}
}
EDIT Merci pour l'aide les gars, il se trouve la question était dans ma méthode GetHashCode qui ne gère pas correctement la valeur nulle. Une fois que j'ai réparé tout cela était bon. J'ai marqué le premier à répondre comme étant correct. Désolé pour le Red Herring, mais en travaillant avec vous les gars ont aidé.
Et quel est le problème? Cela devrait fonctionner (sérialiser et désérialiser au moins); quel comportement est-ce que vous n'aimez pas? –
Je n'ai pas pu reproduire l'exception que vous prétendez obtenir. J'ai été en mesure de sérialiser et de désérialiser une instance de votre MyClass exacte comme vous l'avez donné. Peut-être qu'il se passe quelque chose d'autre? –
@Brian ouais quelque chose d'autre se passait, merci pour toute l'aide rapide et montrant que ce n'était pas le code XML lui-même. :) –