2017-04-16 5 views
0

私はこの質問を繰り返さないことを願っていますが、私を助けてくれるものが見つかりませんでした。特定のXMLデータをクラス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の要素から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

あなたが最小work3ed例を提供する必要があります。これまでに何を試しましたか?パラメータに基づいてノードを分離するために 'XPath 'を使用することに関する研究を行ったことがありますか? –

+1

[XML文書をデシリアライズする方法]の可能な複製(0120) – MickyD

+0

@AndrewTruckle申し訳ありませんが、私は私のメインポストにそれを含めるのを忘れました。それを逆シリアル化しようとしていましたが、私のコンストラクタについて何か言っている間違いがありました。しかし、jdwengは私を助けた何かを掲示しました。 – gpenner

答えて

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

ありがとう、これは私を助けました。 – gpenner

0

あなたはSystem.Xml.XmlDocumenthttps://msdn.microsoft.com/en-us/library/system.xml.xmldocument(v=vs.110).aspx)クラスのインスタンスにXMLをロードして、C#のオブジェクト(複数可)に、特定の必要なノードを読み取ることができます。

もう1つの方法は、XPATH(https://msdn.microsoft.com/en-us/library/ms256086(v=vs.110).aspx)を使用することです。

希望します。

+0

これらのリンクありがとう、私はそれらを読むでしょう:) – gpenner

関連する問題