C# 使用反射将XML数组反序列化到列表中
我想将XML文档反序列化为对象,这是我的对象定义:C# 使用反射将XML数组反序列化到列表中,c#,reflection,xml-deserialization,propertyinfo,C#,Reflection,Xml Deserialization,Propertyinfo,我想将XML文档反序列化为对象,这是我的对象定义: public class Student { public string FirstName { get; set; } public string LastName { get; set; } public List<string> Hobbies { get; set; } } 但是上面的函数不再起作用了(XML输入已经更改,现在它有一个名为嗜好的数组) 以下行引发异常: prop.SetValue(s
public class Student
{
public string FirstName { get; set; }
public string LastName { get; set; }
public List<string> Hobbies { get; set; }
}
但是上面的函数不再起作用了(XML输入已经更改,现在它有一个名为嗜好的数组)
以下行引发异常:
prop.SetValue(student, child.InnerText); // child.InnerText = ReadingSingingTennis
这是因为业余爱好的child.InnerText
返回readingtennis
,代码尝试将列表设置为单个字符串
如何修改此函数以正确设置嗜好?问题在于嗜好中有节点
所以你可以这样试试
public static void DeserializeNode(XmlNode node)
{
var student = new Student();
foreach (XmlNode child in node)
{
PropertyInfo prop = student.GetType().GetProperty(child.Name);
if (child.Attributes.GetNamedItem("type").Value == "list")
{
var list = Activator.CreateInstance(prop.PropertyType);
foreach (XmlNode item in child)
{
var methodInfo = list.GetType().GetMethod("Add");
methodInfo.Invoke(list, new object[] { item.InnerText });
}
prop.SetValue(student, list);
}
else
{
prop.SetValue(student, child.InnerText);
}
}
}
但是如果您有更复杂的xml,您应该使用递归和反射它会引发什么样的异常?异常的消息是什么?
prop.SetValue(student, child.InnerText); // child.InnerText = ReadingSingingTennis
public static void DeserializeNode(XmlNode node)
{
var student = new Student();
foreach (XmlNode child in node)
{
PropertyInfo prop = student.GetType().GetProperty(child.Name);
if (child.Attributes.GetNamedItem("type").Value == "list")
{
var list = Activator.CreateInstance(prop.PropertyType);
foreach (XmlNode item in child)
{
var methodInfo = list.GetType().GetMethod("Add");
methodInfo.Invoke(list, new object[] { item.InnerText });
}
prop.SetValue(student, list);
}
else
{
prop.SetValue(student, child.InnerText);
}
}
}