J'ai une classe dont j'ai besoin pour faire une sortie XML personnalisée, donc j'implémente l'interface IXmlSerializable. Cependant, certains des champs que je veux sortir avec la sérialisation par défaut, sauf que je veux changer les noms de balises xml. Lorsque j'appelle serializer.Serialize, j'obtiens des noms de balises par défaut dans le XML. Est-ce que je peux changer ça?Sérialisation personnalisée à l'aide de XmlSerializer
Voici mon code:
public class myClass: IXmlSerializable
{
//Some fields here that I do the custom serializing on
...
// These fields I want the default serialization on except for tag names
public string[] BatchId { get; set; }
...
... ReadXml and GetSchema methods are here ...
public void WriteXml(XmlWriter writer)
{
XmlSerializer serializer = new XmlSerializer(typeof(string[]));
serializer.Serialize(writer, BatchId);
... same for the other fields ...
// This method does my custom xml stuff
writeCustomXml(writer);
}
// My custom xml method is here and works fine
...
}
Voici ma sortie Xml:
<MyClass>
<ArrayOfString>
<string>2643-15-17</string>
<string>2642-15-17</string>
...
</ArrayOfString>
... My custom Xml that is correct ..
</MyClass>
Ce que je veux retrouver avec:
<MyClass>
<BatchId>
<id>2643-15-17</id>
<id>2642-15-17</id>
...
</BatchId>
... My custom Xml that is correct ..
</MyClass>
Comment souvent vous sérialisation/désérialisation? Des centaines de fois pendant le cycle de vie de l'application ou uniquement au démarrage ou à l'arrêt. Si le premier j'ai une mise en œuvre qui est nettement plus flexible. –
Vraiment seulement la sérialisation une fois. Cette application est un outil simple qui tire des données d'un format de base de données propriétaire et enregistre au format XML. Donc, je suis en train de tirer des données dans un modèle d'objet, puis immédiatement en série. La plupart des données étaient simples, donc je n'ai pas eu besoin d'implémenter IXmlSerializable ... mais cette donnée particulière était un peu pénible. – KrisTrip
Eh bien jetez un oeil ici, le code est MIT http://code.google.com/p/videobrowser/source/browse/MediaBrowser/Library/Persistance/XmlSettings.cs il y a un test unitaire, vous devrez peut-être prolonge un peu, mais toute l'architecture est là. plus pour votre scénario, il sera beaucoup mieux que XmlSerializer –