Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将特定XML数据反序列化到类C中#_C#_Xml_Deserialization - Fatal编程技术网

C# 将特定XML数据反序列化到类C中#

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反序列化到我的类中

<?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; }
    }
}