我需要反序列化下面的xml。我想使用xmlserializer,因为我(更)熟悉它。 我相信这个xml没有正确构造,但我不能改变它。 下面代表一个类别对象列表。当我尝试使用
反序列化时xmlserializer(typeof(List<Category>))
我收到此错误:“类别xmlns =''不是预期的”
<?xml version="1.0" encoding="utf-8" ?>
<categories>
<category id="16" name="Exports" parent_id="13"/>
<category id="17" name="Imports" parent_id="13"/>
<category id="3000" name="Income Payments & Receipts" parent_id="13"/>
<category id="125" name="Trade Balance" parent_id="13"/>
<category id="127" name="U.S. International Finance" parent_id="13"/>
</categories>
如果这就是我必须做的事情,我不介意制作某种虚拟课程来去除它们。 这是我的分类
[XmlType("category")]
public class Category
{
[XmlAttribute("id")]
public int ID { get; set; }
[XmlAttribute("parent_id")]
public int ParentID { get; set; }
[XmlAttribute("name")]
public string Name { get; set; }
}
我的代码:
XmlSerializer serializer = new XmlSerializer(typeof(List<Category>));
StringReader reader = new StringReader(xml);
List<Category> obj = null;
using (System.Xml.XmlReader xmlReader = System.Xml.XmlReader.Create(reader))
{
obj = (List<Category>)serializer.Deserialize(xmlReader);
}
return obj;
答案 0 :(得分:2)
您只需将XmlRootAttribute
传递到“类别”部分的序列化程序中即可。
但是......你必须删除“&amp;”来自您的xml,因为它无效
XmlSerializer serializer = new XmlSerializer(typeof(List<Category>), new XmlRootAttribute("categories"));
using (FileStream fileStream = new FileStream(@"C:\Test.xml", FileMode.Open, FileAccess.Read, FileShare.Read))
{
var test = serializer.Deserialize(fileStream);
}
以下是使用String.Replace
处理“&amp;”
private List<Category> GetCategories(string xmlData)
{
List<Category> obj = null;
XmlSerializer serializer = new XmlSerializer(typeof(List<Category>), new XmlRootAttribute("categories"));
StringReader reader = new StringReader(xmlData.Replace("&","&"));
using (System.Xml.XmlReader xmlReader = System.Xml.XmlReader.Create(reader))
{
obj = (List<Category>)serializer.Deserialize(xmlReader);
}
return obj;
}
答案 1 :(得分:1)
尝试制作一个包含List<Category>
的类别类:
[XmlRoot("categories")]
public class Categories
{
public Categories()
{
Items = new List<User>();
}
[XmlElement("category")]
public List<Category> Items {get;set;}
}
你可以创建一个这样的序列化器:
XmlSerializer serializer = new XmlSerializer(typeof(Categories));
答案 2 :(得分:0)
你有一个这个XML应该符合的XSD吗?如果是,您可以使用以下命令生成所需的代码: “xsd your.xsd / classes”