Je dois tester mon application qui envoie xml via une requête http. Alors je me l'envoie et j'essaie de le désertifier. Je reçois "Il y a une erreur dans le document XML (1, 2).". Je peux créer XmlDocument avec une chaîne xml reçue, donc xml est correct. Je pense avoir l'exception car j'ai créé un schéma à partir d'une source différente, c'est-à-dire que j'ai copypassé mes classes pour xml dans une autre application, créé un schéma en utilisant cette application, puis j'ai créé des classes à partir de ce schéma. Maintenant, j'ai créé un serveur simple qui reçoit xml via http et essaye de le désérialiser et copié les classes générées là. Voici le code:C# Erreur lors de la désérialisation de xml à l'objet
static void Main(string[] args)
{
HttpListener listener = new HttpListener();
listener.Prefixes.Add(@"http://127.0.0.1:123/ololo/");
listener.Start();
var context = listener.GetContext();
var xmlstring = string.Empty;
using (var sr = new StreamReader(context.Request.InputStream))
{
xmlstring = sr.ReadToEnd();
}
XmlDocument xmlka = new XmlDocument();
xmlka.LoadXml(xmlstring);
XmlSerializer serializer = new XmlSerializer(typeof(XmlData));
MemoryStream memStream = new MemoryStream(Encoding.UTF8.GetBytes(xmlstring));
try
{
XmlData resultingMessage = (XmlData)serializer.Deserialize(memStream);
}
catch(Exception ex)
{
}
}
Trace de la pile:
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
at System.Xml.Serialization.XmlSerializer.Deserialize(Stream stream)
at ConsoleApplication1.Program.Main(String[] args) in c:\\users\\jamil\\documents\\visual studio 2015\\Projects\\ConsoleApplication1\\ConsoleApplication1\\Program.cs:line 45
message InnerException:
<XmlData xmlns='http://schemas.datacontract.org/2004/07/Common.Util'> was not expected.
Tous les index de classes générées ressemblent à ceci:
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
//
// This source code was auto-generated by xsd, Version=4.6.1055.0.
//
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = true)]
Ce qui me embrouille à ce sujet est Namespace = « »
Collez votre fichier XML. – Aybe
Qu'a-t-il à la ligne 45 de 'program.cs'? –
@Ivan, XmlData resultMessage = (XmlData) serializer.Deserialize (memStream); – Jamil