2016-09-08 6 views
1

Ich habe eine XML-Datei mit Kennungen enthält, die ich bekommen würde, schauen die xml wieDeserialize XML ein Wörterbuch

<Dictionary 
    x:TypeArguments="x:String, x:Object" 
    xmlns="clr-namespace:System.Collections.Generic;assembly=mscorlib" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
>  
    <List x:TypeArguments="x:Int32" x:Key="key" Capacity="4">  
    <x:Int32>60371408</x:Int32>  
    <x:Int32>60371409</x:Int32> 
    </List> 
</Dictionary> 

Die Kennungen, die ich zu bekommen 60.371.408 ist, 60371409

Antwort

1

ich fand nur eine Lösung: enter image description here

Vielen Dank für Ihre Reaktion: D

0

eine XmlSerializer erstellen :

var serializer = new XmlSerializer(typeof(Dictionary<string, object>)); 

... dann deserialize. Sie haben nicht angegeben, in welcher Form sich diese XML befindet, z. B. ob Sie eine Zeichenfolge oder einen Stream haben. Hier ist, wie Sie einen XML-String deserialisieren würde:

var reader = new StringReader(xml); 
var dict = serializer.Deserialize(reader); 

Jetzt haben Sie Ihre Dictionary<string, object>, aber da Werte sind einfache Objekte, werden Sie die Werte werfen müssen:

var list = (List<int>)dict["key"]; 
+0

Hallo Jacob vielen Dank für Ihre Reaktivität, aber ich habe dieses Problem, wenn Sie versuchen, den Xmlserializer mit Dictionary: System.Collections.Generic.Dictionary Typ wird nicht unterstützt, da IDictionary implementiert. – user3764415

0

Try xml linq

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 

namespace ConsoleApplication1 
{ 
    public class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     public static void Main() 
     { 
      XDocument doc = XDocument.Load(FILENAME); 

      XElement dictionary = doc.Descendants().Where(x => x.Name.LocalName == "Dictionary").FirstOrDefault(); 
      XNamespace xNs = dictionary.GetNamespaceOfPrefix("x"); 

      var results = dictionary.Descendants(xNs + "Int32").Select(x => (int)x).ToList(); 

     } 

    } 
}