La désérialisation XML ne fonctionne qu'avec l'espace de nommage dans xml
Le moyen le plus simple-je obtenir ServiceStack désérialisation xml pour travailler, c'est lorsque le fichier xml contient un espace de noms. Cependant, le xml je recevoir ne contiennent pas d'espaces de noms. Le plus simple exemple de travail:
[Serializable]
public class test
{
}
class Program
{
static void Main(string[] args)
{
string xml="<test xmlns=\"http://schemas.datacontract.org/2004/07/\"></test>";
var result = ServiceStack.Text.XmlSerializer.DeserializeFromString<test>(xml);
}
}
Cependant, ce n'est pas ce que je veux. Je veux la suite de désérialiser, puisque c'est le xml-je obtenir à partir de plusieurs services:
string xml="<test></test>";
Mais qui me donne l'erreur suivante:
DeserializeDataContract: Error converting type: Error in line 1 position 7.
Expecting element 'test' from namespace
'http://schemas.datacontract.org/2004/07/'..
Encountered 'Element' with name 'test', namespace ''.
J'ai essayé:
[Serializable]
[XmlRoot("test", Namespace = "")]
public class test
Je ne peux pas créer un nouveau Sérialiseur, parce que ServiceStack.Texte.XmlSerializer est statique. J'ai besoin de choisir pour Microsoft XmlSerializer OU ServiceStack (pas les deux). Sens: si je ne peux pas obtenir ce simple exemple pour travailler j'ai besoin de passer un ailleurs très utiles dans le cadre de la ServiceStack paquet. La dernière chose que je veux, c'est d'injecter une dose d'factice de l'espace de noms entrant dans le xml.
OriginalL'auteur user1154148 | 2012-03-13
Vous devez vous connecter pour publier un commentaire.
ServiceStack utilise .NET Xml DataContractSerializer pour sérialiser XML pour supprimer les espaces de noms, vous devez définir l'espace de Noms à une chaîne vide avec:
Mais vous aurez à marquer chaque propriété que vous souhaitez sérialisé avec [DataMember] attributs. Une meilleure option est de spécifier un vide de l'espace de noms pour tous les types de sous C# de l'espace de noms par l'ajout et l'Assemblée de l'attribut dans votre de l'Assemblée.cs fichier électronique.g:
Remarque: vous pouvez supprimer l'attribut [Serializable] - il n'est pas utilisé par l'un de ServiceStack de sérialiseurs. Aussi tous les XmlSerializer attributs comme [XmlRoot] sont inutiles puisque ServiceStack utilise .NET DataContractSerializer pas Microsoft antérieure de XmlSerializer.
Aucune raison que vous n'avez pas à écrire votre propre XML deserializer? Microsoft semble avoir besoin de ce type de magie sauce de configuration pour le faire fonctionner, contrairement à votre JSON sérialiseur/deserializer, qui fonctionne, tout simplement.
Ouais, je n'aime pas du NIH qui pratiquent sans une bonne raison et je préfère ne pas utiliser le format XML. MS XML de DCS est également très performant pour XML, il y a peu d'avantages pour le montant de l'effort qu'il serait nécessaire.
OriginalL'auteur mythz