我想使用XmlSerializer
反序列化以下xml文件
<?xml version="1.0"?>
<General>
<Component>
<Foo>Foo value1</Foo>
<Bar>Bar value1</Bar>
</Component>
<Component>
<Foo>Foo value2</Foo>
<Bar>Bar value2</Bar>
</Component>
<Component>
<Foo>Foo value3</Foo>
<Bar>Bar value3</Bar>
</Component>
<Component>
<Foo>Foo value4</Foo>
<Bar>Bar value4</Bar>
</Component>
</General>
我应该如何组织反序列化的类?
修改 这就是我的尝试:
public class General
{
public List<Component> Component { get; set; }
}
public class Component
{
public string Name { get; set; }
public string Artifact { get; set; }
}
答案 0 :(得分:1)
请参阅General
课程。我将列表的名称更改为Components
,并使用XmlElement
属性进行修饰。
XmlSerializer ser = new XmlSerializer(typeof(General));
var g = (General)ser.Deserialize(yourStream);
public class General
{
[XmlElement("Component")]
public List<Component> Components { get; set; }
}
public class Component
{
public string Foo { get; set; }
public string Bar { get; set; }
}
答案 1 :(得分:0)
这个怎么样:
public class Component
{
public string Foo {get;set;}
public string Bar {get;set;}
}
答案 2 :(得分:0)
我希望我能帮助您解决此准则。创建一个新的项目并使用此代码进行调试。不要忘记将XML-Data
添加到debug-folder
。在xreader.Name Value
中显示以了解您必须执行的操作。我不知道你的组件的结构,所以我不能帮你更多。如果你告诉我,我可以提供更多帮助
public Form1()
{
InitializeComponent();
XmlTextReader xreader = new XmlTextReader("YourXML.xml");
string elem = "";
while (xreader.Read()) //Read per line (and ?Withspace? (Pls correct me here))
{
switch (xreader.NodeType) //Is the line a Element(<General>;<Component>;<Foo>;<Bar>) or Text(value1)
{
case XmlNodeType.Element:
if (xreader.Name.ToString().Contains("Foo"))
elem = xreader.Name;
else if (xreader.Name.ToString().Contains("Bar"))
elem = xreader.Name;
break;
case XmlNodeType.Text:
{
if (elem == "Foo")
{
string value1 = xreader.Value;
}
else if (elem == "Bar")
{
string value2 = xreader.Value;
}
}
break;
}
}
xreader.Close();
}
PS:请纠正我的语法