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

C# 将带有参数的XML反序列化为对象,c#,xml,deserialization,C#,Xml,Deserialization,我有一个简单的xml,我只是不能反序列化到一个对象,我的模型类有一些问题。我刚刚收到一个空的对象 "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n<response> \n<lst name=\"responseHeader\"> <int name=\"status\">0</int> <int name=\"QTime\">20596</int> <

我有一个简单的xml,我只是不能反序列化到一个对象,我的模型类有一些问题。我刚刚收到一个空的对象

"<?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"
我的模型类如下所示:

[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; }
}
[XmlType(“响应”)]
公众课堂反应
{
[XmlElement(“负责人”)]
公共字符串名称{get;set;}
公共列表Lst{get;set;}
}
公共类lst
{
[XmlElement(“名称”)]
公共字符串名称{get;set;}
[XmlElement(“int”)]
公共列表Int{get;set;}
}
公共类Int
{
[XmlElement(“状态”)]
公共int状态{get;set;}
[XmlElement(“QTime”)]
公共int QTime{get;set;}
}
像这样试试

/*
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);
/*
var x=“\n\n020596\n\n”;
*/
var x=结果.内容;
x=x.Replace(“\\n”,string.Empty)。Replace(“\\”,string.Empty);
XmlSerializer serializer=新的XmlSerializer(typeof(response));
StringReader rdr=新StringReader(x);
响应结果消息=
(响应)序列化程序。反序列化(rdr);

有时,额外的字符可能会导致转换问题。

需要纠正一些问题

您需要清理Xml

XmlSerializer serializer = new XmlSerializer(typeof(response));              
StringReader rdr = new StringReader(xmlString.Replace(@"\n",String.Empty).Replace(@"\'","'"));
response resultingMessage = 
(response)serializer.Deserialize(rdr);
其次,您需要对数据结构进行一些更改。例如,响应不需要
名称
。它需要是
lst
的一部分。它也是一个
属性
,而不是
元素
。因此需要用
[xmldattribute]

[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; }
}
[XmlType(“响应”)]
公众课堂反应
{
[XmlElement(“lst”)]
公共列表Lst{get;set;}
}
公共类lst
{
[XmlAttribute(“名称”)]
公共字符串名称{get;set;}
[XmlElement(“int”)]
公共列表Int{get;set;}
}
公共类Int
{
[XmlAttribute(AttributeName=“name”)]
公共字符串名称{get;set;}
[XmlText]
公共字符串文本{get;set;}
}
输出


你面临着什么样的困难?你有错误吗?例外?
XmlSerializer
非常冗长,这妨碍了他对对象进行序列化/反序列化。在反序列化之前,您是否尝试从xml中删除“/”?我的困难是我得到了一个空对象。。我想得到QTime值和status值我有结构,但仍然没有values@LiseOestergaard请重新检查数据结构,有一些更改。属性也发生了变化。例如,lst.Name使用[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; }
}