C# 将特定XML数据反序列化到类C中#
我希望我没有重复这个问题,但我找不到任何对我有帮助的东西 我想将下面的.xml反序列化到我的类中C# 将特定XML数据反序列化到类C中#,c#,xml,deserialization,C#,Xml,Deserialization,我希望我没有重复这个问题,但我找不到任何对我有帮助的东西 我想将下面的.xml反序列化到我的类中 <?xml version="1.0" encoding="UTF-8" ?> <config> <buildings> <building> <name>Name</name> <id>1</id> <
<?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>
完成这项任务的最佳方法是什么?
谢谢。您可以将XML加载到
System.XML.XmlDocument
()类实例中,并将所需的特定节点读取到C#对象中
另一种选择是,可以使用XPATH()
希望有帮助。尝试以下内容:
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; }
}
}
您需要提供一个最低限度的工作示例。到目前为止你试过什么?您是否研究过使用
XPath
根据参数隔离节点?可能重复@AndrewTruckle抱歉,我忘了在我的主要帖子中包含它,我试图对其进行反序列化,但在谈到我的构造函数时出错。但是jdweng发布了一些帮助我的东西。谢谢你,这帮了我。
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; }
}
}