简体   繁体   中英

Deserialise XML with parameters to object

I have this simple xml that I just can't deserialise to an object, there are something wrong with my model classes. I just Receive an empty object.

"<?xml version=\"1.0\" encoding=\"UTF-8\"?>
\n<response>
\n<lst name=\"responseHeader\">
   <int name=\"status\">0</int>
   <int name=\"QTime\">20596</int>
</lst>\n
</response>\n"

i serialize like this:

var x = result.Content;     
XmlSerializer serializer = new XmlSerializer(typeof(response));              
StringReader rdr = new StringReader(x);
response resultingMessage = 
(response)serializer.Deserialize(rdr);

and my model classes look like:

[XmlType("response")]
public class response
{
    [XmlElement("responseHeader")]
    public string Name { get; set; }
    public List<lst> Lst { get; set; }
}

public class lst
{
    [XmlElement("name")]
    public string Name { get; set; }
    [XmlElement("int")]
    public List<Int> Int { get; set; }
}

public class Int
{
    [XmlElement("status")]
    public int status { get; set; }
    [XmlElement("QTime")]
    public int QTime { get; set; }
}

Couple things to be corrected.

You need to clean the Xml

XmlSerializer serializer = new XmlSerializer(typeof(response));              
StringReader rdr = new StringReader(xmlString.Replace(@"\n",String.Empty).Replace(@"\'","'"));
response resultingMessage = 
(response)serializer.Deserialize(rdr);

Secondly, You data structure require some changes. For example, response doesn't require a name . It needs to be part of lst . Also it is an attribute , not an element . Hence needs to be decorated with [XmlAttribute]

[XmlType("response")]
public class response
{
    [XmlElement("lst")]
    public List<lst> Lst { get; set; }
}

public class lst
{
    [XmlAttribute("name")]
    public string Name { get; set; }
    [XmlElement("int")]
    public List<Int> Int { get; set; }
}

public class Int
{
    [XmlAttribute(AttributeName="name")]
    public string Name { get; set; }
    [XmlText]
    public string Text { get; set; }
}

Output

在此处输入图片说明

try like this,

/*
var x = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<response>\n<lst name=\"responseHeader\"><int name=\"status\">0</int><int name=\"QTime\">20596</int></lst>\n</response>\n";

*/

var x = result.Content;   
 x= x.Replace("\\n", string.Empty).Replace("\\", string.Empty);  
XmlSerializer serializer = new XmlSerializer(typeof(response));              
StringReader rdr = new StringReader(x);
response resultingMessage = 
(response)serializer.Deserialize(rdr);

sometimes extra characters can cause the conversion issue.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM