La sérialisation XML, encodage
using System;
public class clsPerson
{
public string FirstName;
public string MI;
public string LastName;
}
class class1
{
static void Main(string[] args)
{
clsPerson p=new clsPerson();
p.FirstName = "Jeff";
p.MI = "A";
p.LastName = "Price";
System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(p.GetType());
x.Serialize(Console.Out, p);
Console.WriteLine();
Console.ReadLine();
}
}
prises de http://support.microsoft.com/kb/815813
1)
System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(p.GetType());
Quoi cette ligne? qu'est-ce que GetType()?
2) comment puis-je obtenir de l'encodage à
<?xml version="1.0" encoding="utf-8"?>
< clsPerson xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
au lieu de
<?xml version="1.0" encoding="IBM437"?>
<clsPerson xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3
.org/2001/XMLSchema">
ou de ne pas inclure le type d'encodage à tous?
OriginalL'auteur 001 | 2011-02-08
Vous devez vous connecter pour publier un commentaire.
1) Le GetType() renvoie un objet de Type représente le type de votre objet, dans ce cas, la classe
clsPerson
. Vous pouvez également utilisertypeof(clsPerson)
et obtenir le même résultat. Cette ligne crée un objet XmlSerializer pour votre classe.2) Si vous souhaitez modifier l'encodage, je crois qu'il existe une substitution de la fonction Serialize() fonction qui permet d'indiquer que l'. Voir MSDN pour plus de détails. Vous pourriez avoir à créer un XmlWriter objet pour l'utiliser bien que, les détails sont aussi sur MSDN:
Vous pouvez aussi définir l'encodage dans la XmlWriter, le XmlWriterSettings objet a une propriété de Codage.
OriginalL'auteur
Si vous passez le sérialiseur un XmlWriter, vous pouvez contrôler certains paramètres, comme l'encodage, que ce soit à omettre la déclaration (par exemple pour un fragment), etc.
Ce n'est pas destiné à être un guide définitif, mais une alternative afin que vous puissiez voir ce qu'il se passe, et quelque chose qui n'est pas seulement aller à la console en premier.
Remarque aussi, si vous créez votre XmlWriter avec un StringBuilder au lieu d'un MemoryStream, votre xml ignore votre Encodage et de sortir comme codé en utf-16. Voir le post de blog l'écriture d'un document xml avec l'encodage utf8 pour plus d'informations.
Dans cet exemple, le StreamReader va fermer le MemoryStream. L'aide de Disposer de la XmlWriter va alors essayer d'accéder à la fermeture de flux. Voir stackoverflow.com/a/8833066/28594 pour les autres moyens de la structure de l'usage.
+1 pour la référence à StringBuilder et utf-16
Sheesh. Parler de la complexité cachée.
OriginalL'auteur
1) Cela crée un XmlSerializer pour la classe clsPerson.
2) le codage est IBM437 parce que c'est la forme de la Console.Hors flux.
PS: la notation hongroise n'est pas recommandée en C#; juste le nom de la classe Personne.
OriginalL'auteur
J'ai pris la solution proposée par @robert paulson ici pour la même chose j'ai essayé de faire et d'obtenir la chaîne de caractères d'un XmlSchema. Par défaut, il serait de retour en tant que utf-16. Cependant, comme mentionné ici la solution souffre d'un cours d'eau Fermé erreur de Lecture. J'ai donc l'outil de la liberté de l'affichage de la refactoriser comme une extension de la méthode avec l'ajustez mentionné par @Liam à se déplacer à l'aide du bloc.
OriginalL'auteur