7
votes

manière rapide de désérialiser XML avec des caractères spéciaux

Je cherche un moyen rapide de désérialiser XML, qui présente des caractères spéciaux comme ö.

J'utilisais xmlreader et il manque de désériorialze de tels personnages.

Toute suggestion?

EDIT: J'utilise c #. Le code est comme suit: xxx


5 commentaires

Quelle langue / plateforme? Quel codage utilisez-vous? Pouvez-vous envoyer votre code?


désériorialisation? Tu veux dire analyser? Pour quelle langue / but est-ce?


Dans quel contexte les caractères apparaissent-ils? Est-ce réellement valide XML ou juste un xml-similaire?


Il est valide XML, il apparaît lorsque XML contient des caractères allemands / japonais


XMLreader traite tous les caractères, mais cela peut être un problème de codage. Pourriez-vous poster une reproduction complète et une trace complète de la pile aussi?


3 Réponses :


-1
votes
    [XmlElement(ElementName = "Profiles")]
    //public ProfilesType[] Profiles { get; set; }
    public Profiles Profiles { get; set; }
Tried something above?I haven't checked, but this sprang to mind. I managed to de+serialize Data that has åäö etc.
U are not talking about tagnames?

3 commentaires

Comment cela va-t-il aider .. Je suis désolé ne vous a pas eu!


Comme <Årtal> 2011 , puis ellementName = "Årtal"


Malheureusement, Årtal causent l'exception.



8
votes

Je suppose que vous avez un problème de codage, pas dans le xmlreader mais avec le xmlSerializer .

Vous pouvez utiliser le xmltextwriter et utf8 codant avec le xmlSerializer Comme dans l'extrait suivant (voir les méthodes génériques ci-dessous pour une implémentation plus agréable de celui-ci). Fonctionne juste bien avec les UMLAUTS (¤Ã¶0) et d'autres caractères spéciaux . XXX

J'utilise personnellement les méthodes génériques de Follwing pour sérialiser et désérialiser XML et des objets et n'ont pas encore eu de problèmes de performance ou de codage. xxx


2 commentaires

Hmm. Enveloppez un flux dans un XMLTextwriter, puis écrivain. Basestream semble que vous pouviez simplement passer le flux sans le XMLTextWriter. Surtout depuis De déserialize, veut un xmlreader, pas un écrivain, si vous allez aller cette voie.


@Jessechisholm vous avez raison, cela a le sens total. J'ai également trouvé la mise en œuvre avec StreamReader Un couple Ticks plus rapidement.



2
votes

Qu'est-ce qui fonctionne pour moi est similaire à ce que @ Martin-Buberl a suggéré:

public static T DeserializeXmlToObject<T>(string xml)
{
    using (MemoryStream memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(xml)))
    {
        XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
        StreamReader reader = new StreamReader(memoryStream, Encoding.UTF8);
        return (T)xmlSerializer.Deserialize(reader);
    }
}


0 commentaires