2015-07-14 2 views
0

У меня есть следующий код, который должен десериализовать строку XML в класс, который содержит большинство элементов в XML-файле, возможно, у них не все, что отлично, они должны просто принять NULL.C# XML Сериализация Не работает

Когда я запускаю следующий код, используя XML ниже, он оставляет каждое значение как NULL.

Все указатели на где я буду неправильно

Thanks

ServiceResponse ReturnVal = new ServiceResponse(); 

try 
{ 
    XmlSerializer serializer = new XmlSerializer(typeof(ServiceResponse)); 

    StringReader sr = new StringReader(XMLResponse); 

    NamespaceIgnorantXmlTextReader XMLWithoutNamespace = new NamespaceIgnorantXmlTextReader(sr); 

    ReturnVal = (ServiceResponse)serializer.Deserialize(XMLWithoutNamespace); 

} 
catch (Exception ex) 
{ 
    throw ex; 
} 


[XmlRoot("ServiceResponse")] 
public class ServiceResponse 
{ 
    public string RequestType { get; set; } 

    public string ApplicationSender { get; set; } 

    public string WorkstationID { get; set; } 

    public string POPID { get; set; } 

    public string RequestID { get; set; } 

    public string ReferenceNumber { get; set; } 

    public string ProtocolVersion { get; set; } 

    public string DeviceType { get; set; } 

    public string SWChecksum { get; set; } 

    public string CommunicationProtocOl { get; set; } 

    public string Model { get; set; } 

    public string ApplicationSoftwareVersion { get; set; } 

    public string Manufacturer_Id { get; set; } 

    public string OverallResult { get; set; } 

} 

public class NamespaceIgnorantXmlTextReader : XmlTextReader 
{ 
    public NamespaceIgnorantXmlTextReader(System.IO.TextReader reader) : base(reader) { } 

    public override string NamespaceURI 
    { 
     get { return ""; } 
    } 
} 

XMLResponse будет равна слишком следующее:

<?xml version="1.0" encoding="UTF-8" standalone="no"?><ServiceResponse RequestType="Login" ApplicationSender="QWERTY" WorkstationID="1" RequestID="1254" ProtocolVersion="12" DeviceType="1" SWChecksum="1" CommunicationProtocol="11" Model="1" ApplicatioSoftwareVersion="010" Manufacturer_Id="0" OverallResult="Success" xmlns="http://www.nrf-arts.org/IXRetail/namespace" xmlns:IFSF="http://www.ifsf.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.nrf-arts.org/IXRetail/namespace C:\Schema\ServiceResponse.xsd" /> 
+0

Необходимо идентифицировать свои свойства как атрибуты, иначе он попытается прочитать их как узлы. См. Https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlattributes.xmlattribute(v=vs.110).aspx –

+0

Спасибо, Рон, только что понял, что сейчас –

ответ

1

Все ваши свойства являются атрибуты и XmlSerializer будет интерпретировать их как элементов, если вы не сообщите об этом в противном случае.

Добавить [XmlAttribute] атрибуты для каждого из ваших свойств, и это сработает.

Как в стороне, throw ex будет выгружать трассировку стека, и это обычно не то, что вы хотите - см. this question для более подробной информации. Если вы не собираетесь делать ничего с исключением, удаление try/catch было бы лучше.

+0

Спасибо Чарльз, только что увидел ваш ответ сейчас, я только что проработал и опубликовал обновление. Спасибо за совет RE: throw ex –

0

Выполнено, отсутствует оформление в классе для отображения карты. [XmlAttribute()] public string RequestType {get; задавать; }

[XmlAttribute()] 
    public string ApplicationSender { get; set; } 

    [XmlAttribute()] 
    public string WorkstationID { get; set; } 

    [XmlAttribute()] 
    public string POPID { get; set; } 

    [XmlAttribute()] 
    public string RequestID { get; set; } 

    [XmlAttribute()] 
    public string ReferenceNumber { get; set; } 

    [XmlAttribute()] 
    public string ProtocolVersion { get; set; } 

    [XmlAttribute()] 
    public string DeviceType { get; set; } 

    [XmlAttribute()] 
    public string SWChecksum { get; set; } 

    [XmlAttribute()] 
    public string CommunicationProtocOl { get; set; } 

    [XmlAttribute()] 
    public string Model { get; set; } 

    [XmlAttribute()] 
    public string ApplicationSoftwareVersion { get; set; } 

    [XmlAttribute()] 
    public string Manufacturer_Id { get; set; } 

    [XmlAttribute()] 
    public string OverallResult { get; set; } 
Смежные вопросы