Я пытаюсь десериализовать следующий xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<common:messages xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:ns3="http://rest.immobilienscout24.de/schema/platform/gis/1.0"
xmlns:common="http://rest.immobilienscout24.de/schema/common/1.0">
<message>
<messageCode>ERROR_DESCRIPTION</messageCode>
<message>The request is not schema valid. [MESSAGE: org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 3; cvc-complex-type.2.4.a: Invalid content was found starting with element 'external-Id'. One of '{externalId, title}' is expected.] </message>
</message>
<message>
...
</message>
</common:messages>
в следующий экземпляр класса messages
:
[XmlRoot("messages", Namespace = NS.Common)]
public partial class messages
{
[XmlElementAttribute("message")]
public List<Message> message { get; set;}
}
public partial class Message
{
[XmlElement("messageCode", Namespace = NS.Common)]
public MessageCode messageCode { get; set; }
[XmlElement("message", Namespace = NS.Common)]
public string message { get; set; }
}
[Serializable]
[XmlType(Namespace = NS.Common)]
public enum MessageCode
{
ERROR_DESCRIPTION,
RESOURCE_CREATED
}
public class NS
{
public const string Common = "http://rest.immobilienscout24.de/schema/common/1.0";
}
public class XmlHelper
{
public static T Deserialize<T>(string xml, Encoding encoding = null) where T : new()
{
if (xml == string.Empty)
return new T();
var serializer = new XmlSerializer(typeof(T));
encoding = encoding ?? Encoding.UTF8;
using (var stream = new MemoryStream(encoding.GetBytes(xml)))
return (T)serializer.Deserialize(stream);
}
}
Я не получаю ошибок от XmlSerializer, но коллекция сообщений всегда пуста.
У меня есть подозрение, что XmlSerializer не может правильно определить, что такое «сообщение» - элемент массива или элемент, содержащий строковое сообщение. Я не могу изменить структуру xml, поэтому я должен исправить свою процедуру десериализатора или некоторые атрибуты свойств xml.
Что не так с моим кодом? Любая помощь приветствуется.
XmlElement
вместоXmlElementAttribute
для элементов сообщения (подробности см. Здесь: stackoverflow.com/questions/11731947/xml-serialization-of-list) - person meilke   schedule 23.09.2013[StrangeNamed]
или[StrangeNamedAttribute]
. И спасибо. Я знаю о подходе, описанном в ответе, на который вы ссылаетесь, и прочитал его и некоторые другие, прежде чем я опубликовал свой собственный вопрос. - person python_kaa   schedule 23.09.2013