簡體   English   中英

將特定的XML數據反序列化為類C#

[英]Deserializing specific XML data into class C#

我希望我不再重復這個問題,但是我找不到可以幫助我的東西。

我有以下要反序列化到我的類中的.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的元素的名稱,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; }
}

什么是執行此任務的最佳方法? 謝謝。

您可以將XML加載到System.Xml.XmlDocumenthttps://msdn.microsoft.com/en-us/library/system.xml.xmldocument ( v= System.Xml.XmlDocument ) System.Xml.XmlDocument )類實例中,並讀取特定的C#對象中需要的節點。

另一種選擇是,您可以使用XPATH( https://msdn.microsoft.com/zh-cn/library/ms256086 ( v= vs.110).aspx)。

希望能幫助到你。

嘗試以下操作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM