2013-02-06 13 views
14

में XML स्ट्रिंग deserialization मुझे इस तरह xml फ़ाइल प्राप्त होती है।सी # ऑब्जेक्ट

<radio> 
    <channel id="Opus"> 
    <display-name>Opus</display-name> 
    <icon src="" /> 
    </channel> 
    <channel id="Klasika"> 
    <display-name>Klasika</display-name> 
    <icon src="" /> 
    </channel> 
    <channel id="LR"> 
    <display-name>LR</display-name> 
    <icon src="" /> 
    </channel> 
    <programme channel="Opus" start="20130203060000" stop="20130203110000" duration="050000"> 
    <title lang="lt">OPUS muzika.</title> 
    <desc lang="lt">OPUS muzika.</desc> 
    <category lang="lt">muzikos laidos</category> 
    <date>2013.02.03</date> 
    </programme> 
    <programme channel="Opus" start="20130203110000" stop="20130203150000" duration="040000"> 
    <title lang="lt">Vėlyvi pusryčiai su OPUS.</title> 
    <desc lang="lt">Vėlyvi pusryčiai su OPUS.</desc> 
    <category lang="lt">muzikos laidos</category> 
    <date>2013.02.03</date> 
    </programme> 
</radio> 

कार्यक्रम और चैनल के कई उदाहरणों के साथ। मैं इस ग # वस्तु में यह deserialize करने की कोशिश, लेकिन मैं एक अशक्त बजाय वस्तु की:

[XmlRoot("radio")] 
public sealed class radio 
{ 
    [XmlRoot("channel")] 
    public sealed class channel 
    { 
     [XmlAttribute("id")] 
     public string id { get; set; } 

     [XmlElement("display-name")] 
     public string displayName { get; set; } 

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

     public channel() 
     {  
     } 
    } 

    [XmlRoot("programme")] 
    public sealed class programme 
    { 
     [XmlAttribute("channel")] 
     public string channel { get; set; } 

     [XmlAttribute("start")] 
     public string start { get; set; } 

     [XmlAttribute("stop")] 
     public string stop { get; set; } 

     [XmlAttribute("duration")] 
     public string duration { get; set; } 

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

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

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

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

     public programme() 
     { 
     } 
    } 

    [XmlArray] 
    public channel[] channels { get; set; } 

    [XmlArray] 
    public programme[] programmes { get; set; } 

    public radio() 
    { 
     channels = null; 
     programmes = null; 
    } 

    public static radio FromXmlString(string xmlString) 
    { 
     var reader = new StringReader(xmlString); 
     var serializer = new XmlSerializer(typeof(radio)); 
     var instance = (radio)serializer.Deserialize(reader); 

     return instance; 
    } 
} 

मैं गलत क्या कर रहा हूँ और क्या उचित xml वस्तु वर्ग हो सकता है?

उत्तर

33

तुम बस आप Radio वर्ग थोड़ा बदलने के लिए होगा, 2 वस्तु प्रकार एक ही सरणी में एक मिश्रित जब से तुम धारावाहिक को यह जानने के लिए कुछ विशेषताओं को जोड़ना होगा कि क्या क्या है।

[XmlRoot("radio")] 
public sealed class radio 
{ 
    [XmlElement("channel", Type = typeof(channel))] 
    public channel[] channels { get; set; } 

    [XmlElement("programme", Type = typeof(programme))] 
    public programme[] programmes { get; set; } 

    public radio() 
    { 
     channels = null; 
     programmes = null; 
    } 

    public static radio FromXmlString(string xmlString) 
    { 
     var reader = new StringReader(xmlString); 
     var serializer = new XmlSerializer(typeof(radio)); 
     var instance = (radio)serializer.Deserialize(reader); 

     return instance; 
    } 
} 

[Serializable] 
public class channel 
{ 
    [XmlAttribute("id")] 
    public string id { get; set; } 

    [XmlElement("display-name")] 
    public string displayName { get; set; } 

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

    public channel() 
    { 
    } 
} 


[Serializable] 
public sealed class programme 
{ 
    [XmlAttribute("channel")] 
    public string channel { get; set; } 

    [XmlAttribute("start")] 
    public string start { get; set; } 

    [XmlAttribute("stop")] 
    public string stop { get; set; } 

    [XmlAttribute("duration")] 
    public string duration { get; set; } 

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

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

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

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

    public programme() 
    { 
    } 
} 

परिणाम:

enter image description here

+2

सुनिश्चित करें कि आप केवल एक बार प्रत्येक तत्व/सरणी/विशेषता को सजाने कर – dubi

6

उपयोग LINQ2XML

XElement doc=XElement.Load("yourXML.xml"); 
var channelLst=doc.Elements("channel").Select(x=> 
new 
{ 
    id=x.Attribute("id").Value, 
    displayName=x.Element("display-name").Value, 
    icon=x.Element("icon").Attribute("src").Value 
} 
); 

अब आप channelLst

के माध्यम से पुनरावृति कर सकते हैं
foreach(var c in channelLst) 
{ 
    c.id; 
    c.displayName; 
} 
संबंधित मुद्दे