C# 将带有参数的XML反序列化为对象
我有一个简单的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 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; }
}