gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:56:34 25 4
gpt4 key购买 nike

我有这个简单的 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"

我这样序列化:

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

我的模型类看起来像:

[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; }
}

最佳答案

一些需要更正的地方。

您需要清理 Xml

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

其次,你的数据结构需要一些改变。例如,响应不需要 name。它需要成为 lst 的一部分。它也是一个属性,而不是一个元素。因此需要用[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; }
}

输出

enter image description here

关于c# - 将带有参数的 XML 反序列化为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54342594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com