2012-05-09 14 views
68
<StepList> 
    <Step> 
    <Name>Name1</Name> 
    <Desc>Desc1</Desc> 
    </Step> 
    <Step> 
    <Name>Name2</Name> 
    <Desc>Desc2</Desc> 
    </Step> 
</StepList> 

मैं इस एक्सएमएल है, कैसे मैं वर्ग मॉडल चाहिए तो मैं XmlSerializer वस्तु का उपयोग कर इसे deserialize में सक्षम हो जाएगा?कैसे deserialize करने के लिए एक्सएमएल आपत्ति उठाने

उत्तर

136

आपका वर्गों की तरह करना चाहिए की तरह इस

[XmlRoot("StepList")] 
public class StepList 
{ 
    [XmlElement("Step")] 
    public List<Step> Steps { get; set; } 
} 

public class Step 
{ 
    [XmlElement("Name")] 
    public string Name { get; set; } 
    [XmlElement("Desc")] 
    public string Desc { get; set; } 
} 

यहाँ मेरी testcode है।

string testData = @"<StepList> 
         <Step> 
          <Name>Name1</Name> 
          <Desc>Desc1</Desc> 
         </Step> 
         <Step> 
          <Name>Name2</Name> 
          <Desc>Desc2</Desc> 
         </Step> 
        </StepList>"; 

XmlSerializer serializer = new XmlSerializer(typeof(StepList)); 
using (TextReader reader = new StringReader(testData)) 
{ 
    StepList result = (StepList) serializer.Deserialize(reader); 
} 

आप आप एक FileStream में फ़ाइल लोड और इस deserialize चाहिए एक पाठ फ़ाइल में पढ़ना चाहते हैं।

using (FileStream fileStream = new FileStream("<PathToYourFile>",FileMode.Open)) 
{ 
    StepList result = (StepList) serializer.Deserialize(fileStream); 
} 
+1

[XmlElement ("चरण")] कुंजी है - "कदम" दूर करने के लिए एक्सएमएल में घोंसला बनने वाले ( ...) – avs099

+1

मुझे समझ में नहीं आता है। निश्चित '[XmlElement ("चरण")] 'कुंजी है, सही है। आप किस विधि से मतलब है "- दूर करने के लिए" कदम "एक्सएमएल में घोंसले ( ...)"। धन्यवाद! – dknaack

+1

अगर आप की जरूरत नहीं है यह आप के लिए, लेकिन दूसरों ने इस सवाल का जवाब :) पढ़ने जा सकता है के लिए नहीं था, [XmlElement] फिर परिणामी एक्सएमएल कि तरह होगा: NAME1 NAME2। यह मुझे थोड़ी देर के कुछ समय पहले ले लिया यह पता लगाने की बाहरी ब्लॉक को निकालने का तरीका। – avs099

12

उपरोक्त टिप्पणियां सही हैं। आप सजावट खो रहे हैं। यदि आप एक सामान्य deserializer चाहते हैं तो आप इसका उपयोग कर सकते हैं।

public static T DeserializeXMLFileToObject<T>(string XmlFilename) 
    { 
     T returnObject = default(T); 
     if (string.IsNullOrEmpty(XmlFilename)) return default(T); 

     try 
     { 
      StreamReader xmlStream = new StreamReader(XmlFilename); 
      XmlSerializer serializer = new XmlSerializer(typeof(T)); 
      returnObject = (T)serializer.Deserialize(xmlStream); 
     } 
     catch (Exception ex) 
     { 
      ExceptionLogger.WriteExceptionToConsole(ex, DateTime.Now); 
     } 
     return returnObject; 
    } 

तो फिर तुम इसे इस तरह फोन चाहते हैं:

MyObjType MyObj = DeserializeXMLFileToObject<MyObjType>(FilePath); 
संबंधित मुद्दे