简体   繁体   English

将带有参数的 XML 反序列化为对象

[英]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.我有这个简单的 xml,我无法反序列化为一个对象,我的模型类有问题。 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你需要清理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 .例如, response 不需要name It needs to be part of lst .它需要是lst一部分。 Also it is an attribute , not an element .它也是一个attribute ,而不是一个element Hence needs to be decorated with [XmlAttribute]因此需要用[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.有时额外的字符会导致转换问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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