La Sérialisation personnalisée à l'aide de XmlSerializer
J'ai une classe que j'ai besoin de faire quelques personnalisé de sortie XML à partir, donc j'implémente l'interface IXmlSerializable. Cependant, certains champs je veux de sortie avec la sérialisation par défaut sauf je veux changer les noms de balise xml. Lorsque j'appelle le sérialiseur.Sérialiser, je reçois par défaut des noms de balise dans le fichier XML. Puis-je modifier ces quelque sorte?
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 mon Xml de sortie:
<MyClass>
<ArrayOfString>
<string>2643-15-17</string>
<string>2642-15-17</string>
...
</ArrayOfString>
... My custom Xml that is correct ..
</MyClass>
Ce que je veux à la fin, c'est:
<MyClass>
<BatchId>
<id>2643-15-17</id>
<id>2642-15-17</id>
...
</BatchId>
... My custom Xml that is correct ..
</MyClass>
Combien de fois êtes-vous de la sérialisation / désérialisation ? 100s de fois pendant le cycle de vie des applications, ou seulement sur démarrage / arrêt. Si l'ancien, j'ai une application qui est nettement plus souple.
Vraiment que de la sérialisation d'une fois. Cette application est un simple outil qui extrait des données à partir d'une propriété format de base de données et les enregistre au format xml. Donc, je suis en tirant des données dans un modèle objet, puis immédiatement à la sérialisation. La plupart des données était simple, alors je n'ai pas besoin de mettre en œuvre IXmlSerializable...mais ce morceau particulier de données a été un peu de douleur.
Eh bien jetez un oeil ici, le code est MIT code.google.com/p/videobrowser/source/browse/MediaBrowser/... il y a un test unitaire ainsi, vous pourriez avoir à le prolonger un peu, mais toute l'architecture est là. plus pour votre scénario, il fonctionnera BEAUCOUP mieux que XmlSerializer
Vraiment que de la sérialisation d'une fois. Cette application est un simple outil qui extrait des données à partir d'une propriété format de base de données et les enregistre au format xml. Donc, je suis en tirant des données dans un modèle objet, puis immédiatement à la sérialisation. La plupart des données était simple, alors je n'ai pas besoin de mettre en œuvre IXmlSerializable...mais ce morceau particulier de données a été un peu de douleur.
Eh bien jetez un oeil ici, le code est MIT code.google.com/p/videobrowser/source/browse/MediaBrowser/... il y a un test unitaire ainsi, vous pourriez avoir à le prolonger un peu, mais toute l'architecture est là. plus pour votre scénario, il fonctionnera BEAUCOUP mieux que XmlSerializer
OriginalL'auteur KrisTrip | 2009-12-30
Vous devez vous connecter pour publier un commentaire.
Dans de nombreux cas, vous pouvez utiliser le
XmlSerializer
constructeur de surcharge qui accepte unXmlAttributeOverrides
de spécifier ce nom supplémentaire de l'information (par exemple, le passage d'une nouvelleXmlRootAttribute
) - toutefois, cela ne fonctionne pas pour les tableaux autant que je sache. - Je m'attendre pour lastring[]
exemple, il serait plus simple de l'écrire manuellement. Dans la plupart des cas,IXmlSerializable
est beaucoup de travail supplémentaire - je l'éviter autant que possible pour des raisons similaires. Désolé.Comment est-il tentant de voir si je peut l'actionner la sortie de pb-net au format xml ;-p
vous devriez totalement faire, et de le rendre enfichable pour que les gens puissent mettre en œuvre leur propre format de persistance, alors vous pourriez même utiliser sqlite comme une banque de données ...
OriginalL'auteur Marc Gravell
Vous pouvez marquer vos champs avec des attributs pour contrôle de la sérialisé en XML. Par exemple, en ajoutant les attributs suivants:
sera probablement vous permettre d'y parvenir.
OriginalL'auteur womp
Si quelqu'un est toujours à la recherche pour cela, vous pouvez certainement utiliser le XmlArrayItem cependant cela doit être d'une propriété dans une classe.
Pour des raisons de lisibilité, vous devez utiliser le pluriel et le singulier d'un même mot.
David
OriginalL'auteur David Homer