我正在尝试将外部xml反序列化为对象。我无法控制这个xml。
以下是一个例子:
<response>
<date>2012-05-23 00:00:00</date>
<users>
<userObject0>
<name>John</name>
<surname>Smith</surname>
</userObject0>
<userObject1>
<name>Jane</name>
<surname>Doe</surname>
</userObject1>
</users>
</response>
我不知道为什么会这样做,我无法弄清楚如何反序列化该xml以获取userObject数组。
甚至可能吗?
编辑:请注意,我正在使用的项目是.net 2.0
答案 0 :(得分:1)
如果数据“不适合”XmlSerializer
,则:不要使用XmlSerializer
。使用xml处理器,例如XmlDocument
或XDocument
,例如:
var response = XElement.Parse(xml);
var users = (from user in response.Element("users").Elements()
select new User {
Name = (string) user.Element("name"),
Surname = (string) user.Element("surname")
}).ToList()
答案 1 :(得分:0)
您可以使用XmlSerializer反序列化:
// Remove numbers from userObject tags
var xmlStringReplaced = Regex.Replace(xmlString, "<(/?)userObject[0-9]+>", "<$1userObject>");
// XmlDeserialize the new XML string to a Response object
var stringReader = new StringReader(xmlStringReplaced);
var xmlSerialize = new XmlSerializer(typeof(Response), new XmlRootAttribute("response"));
var response = (Response)xmlSerialize.Deserialize(stringReader);
要反序列化的类型:
public class Response
{
[XmlIgnore]
public DateTime Date { get; set; }
[XmlElement("date")]
public String DateXmlTemp
{
get { return Date.ToString("yyyy-MM-dd HH:mm:ss"); }
set { Date = DateTime.Parse(value); }
}
[XmlArray("users")]
[XmlArrayItem("userObject")]
public List<UserObject> Users { get; set; }
}
public class UserObject
{
[XmlElement("name")]
public String Name { get; set; }
[XmlElement("surname")]
public String Surname { get; set; }
}
如果要使用userObject标记中的数字,可以更改Regex.Replace以将其作为属性添加到标记中,然后使用和XmlAttribute(“id”)属性将属性添加到UserObject类。