我希望我不会重复这个问题,但我找不到能帮助我的东西。
我有以下.xml,我想反序列化到我的班级。
<?xml version="1.0" encoding="UTF-8" ?>
<config>
<buildings>
<building>
<name>Name</name>
<id>1</id>
<build_time>750</build_time>
<time_factor>1.2</time_factor>
</building>
<building>
<name>Name</name>
<id>2</id>
<build_time>150</build_time>
<time_factor>1.8</time_factor>
</building>
<building>
<name>Name</name>
<id>3</id>
<build_time>950</build_time>
<time_factor>1.4</time_factor>
</building>
</buildings>
</config>
我想将id = 2的元素中的name,id,building_time和time_factor加载到下面的类中。
public class Test
{
public string name { get; set; }
public int id { get; set; }
public int build_time { get; set; }
public double time_factor { get; set; }
}
执行此任务的最佳方法是什么? 谢谢。
答案 0 :(得分:0)
您可以将XML加载到System.Xml.XmlDocument
(https://msdn.microsoft.com/en-us/library/system.xml.xmldocument(v=vs.110).aspx)类实例中,并将所需的特定节点读入C#对象。
另一种选择是,您可以使用XPATH(https://msdn.microsoft.com/en-us/library/ms256086(v=vs.110).aspx)。
希望它有所帮助。
答案 1 :(得分:0)
请尝试以下操作:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test2.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
Test test1 = doc.Descendants("building")
.Where(x => (int)x.Element("id") == 1)
.Select(x => new Test() {
name = (string)x.Element("name"),
id = (int)x.Element("id"),
build_time = (int)x.Element("build_time"),
time_factor = (double)x.Element("time_factor")
}).FirstOrDefault();
}
}
public class Test
{
public string name { get; set; }
public int id { get; set; }
public int build_time { get; set; }
public double time_factor { get; set; }
}
}