2016-10-13 4 views
0

Ich habe Strukturklasse alsDeserialize mehrere XML-Tags auf einzelne C# Objekt

folgt
public class Common 
    { 
     public int price { get; set; } 
     public string color { get; set; } 
    } 
    public class SampleProduct:Common 
    { 
     public string sample1 { get; set; } 
     public string sample2 { get; set; } 
     public string sample3 { get; set; } 
    } 

I XML-Datei wie folgt

<ConfigData> 
    <Common> 
    <price>1234</price> 
    <color>pink</color>  
    </Common> 
    <SampleProduct> 
    <sample1>new</sample1> 
    <sample2>new</sample2> 
    <sample3>new123</sample3> 
    </SampleProduct> 
</ConfigData> 

Jetzt habe ich volle XML-Daten zu SampleProduct Objekt (single deserialisieren wollte Objekt) .Ich kann XML-Daten zu verschiedenen Objekten, aber nicht zu einem einzelnen Objekt deserialisieren. Bitte helfen Sie.

+0

Erstellen Sie die XML-Datei selbst oder an anderer Stelle? – Emad

+0

Sie müssen nur einen neuen Klassennamen "ConfigData" erstellen und Common und SampleProduct in dieser Klasse kompostieren. Verwenden Sie ConfigData als für die Deserialisierung – Kayani

+0

Ich habe eine Bearbeitung vorgeschlagen, um die Klassenstruktur zu ändern, also suchen Sie dies? –

Antwort

0

Wenn Sie die XML erstellen selbst tun Sie es einfach so:

<ConfigData> 
    <SampleProduct> 
    <price>1234</price> 
    <color>pink</color>  
    <sample1>new</sample1> 
    <sample2>new</sample2> 
    <sample3>new123</sample3> 
    </SampleProduct> 
</ConfigData> 

Andernfalls, wenn Sie die XML-Daten aus anderen Quellen erhalten, tun, was Kayani in seinem Kommentar vorgeschlagen:

public class ConfigData 
{ 
    public Common { get; set; } 
    public SampleProduct { get; set; } 
} 

Aber Vergessen Sie nicht, dass das SampleProduct, das auf diese Weise erstellt wurde, keine "price" - und "color" -Eigenschaften hat, und diese sollten mit created Common instance

0

eingestellt werden nutzung mit dem von Ihnen bereitgestellten XML.

public static void Main(string[] args) 
    { 
     DeserializeXml(@"C:\sample.xml"); 
    } 
    public static void DeserializeXml(string xmlPath) 
    { 
     try 
     { 
      var xmlSerializer = new XmlSerializer(typeof(ConfigData)); 
      using (var xmlFile = new FileStream(xmlPath, FileMode.Open)) 
      { 
       var configDataOSinglebject = (ConfigData)xmlSerializer.Deserialize(xmlFile); 
       xmlFile.Close(); 
      } 
     } 
     catch (Exception e) 
     { 
      throw new ArgumentException("Something went wrong while interpreting the xml file: " + e.Message); 
     } 
    } 

    [XmlRoot("ConfigData")] 
    public class ConfigData 
    { 
     [XmlElement("Common")] 
     public Common Common { get; set; } 

     [XmlElement("SampleProduct")] 
     public SampleProduct XSampleProduct { get; set; } 
    } 

    public class Common 
    { 
     [XmlElement("price")] 
     public string Price { get; set; } 

     [XmlElement("color")] 
     public string Color { get; set; } 
    } 

    public class SampleProduct 
    { 
     [XmlElement("sample1")] 
     public string Sample1 { get; set; } 

     [XmlElement("sample2")] 
     public string Sample2 { get; set; } 

     [XmlElement("sample3")] 
     public string Sample3 { get; set; } 
    } 

Dies gibt Ihnen ein einzelnes Objekt mit allen Elementen, die Sie benötigen.

+0

Die Variable configDataOSinglebject gibt Ihnen das Objekt. Ich habe vergessen, dort einen Kommentar hinzuzufügen. – Lykanox