2010-04-22 14 views
8

मेरे पास एक .Net webserivce है जो स्ट्रिंग प्रारूप में XML स्वीकार करता है। XML वेबरिवर्स में भेजा गया स्ट्रिंग सिस्टम में किसी ऑब्जेक्ट का प्रतिनिधित्व कर सकता है। एक्सएमएल स्ट्रिंग को deserialize करने के लिए क्या वस्तु पता लगाने के लिए मुझे पहले नोड की जांच करने की आवश्यकता है। इसके लिए मुझे एक्सएमएल को XMLDocument में लोड करना होगा (RegEx या स्ट्रिंग तुलना का उपयोग नहीं करना चाहते हैं)। मैं सोच रहा हूं कि XMLDocument/XMLNode को Deserialize करने का कोई तरीका है, बजाय कुछ प्रदर्शन को बचाने के लिए स्ट्रिंग को deserializing? क्या XMLNode क्रमशः स्ट्रिंग को क्रमबद्ध करने के लिए कोई प्रदर्शन लाभ होगा?सी # में ऑब्जेक्ट करने के लिए XMLDocument को Deserialize कैसे करें?

विधि XMLDocument लोड करने के लिए

public void LoadFromString(String s) 
{ 
    m_XmlDoc = new XmlDocument(); 
    m_XmlDoc.LoadXml(s);   
} 

धन्यवाद

उत्तर

22

आप एक XmlDocument है, तो आप एक XmlReader रूप XmlNodeReader का उपयोग XmlSerializer को पारित करने के लिए कर सकते हैं, लेकिन मुझे आश्चर्य है कि अगर यह बेहतर होगा यह करने के लिए अन्य रास्ता; एक XmlReader का उपयोग सबसे बाहरी तत्व नाम पाने के लिए, और दे कि XmlSerializer को ...

[XmlRoot("foo")] 
public class Foo 
{ 
    [XmlAttribute("id")] 
    public int Id { get; set; } 
} 
static class Program 
{ 
    static void Main() 
    { 
     string xml = "<foo id='123'/>"; 
     object obj; 
     using (XmlReader reader = XmlReader.Create(new StringReader(xml))) 
     { 
      reader.MoveToContent(); 
      switch (reader.Name) 
      { 
       case "foo": 
        obj = new XmlSerializer(typeof(Foo)).Deserialize(reader); 
        break; 
       default: 
        throw new NotSupportedException("Unexpected: " + reader.Name); 
      } 
     }    
    } 
} 
+0

अरे, आखिर में एक सवाल मैं अपनी आंखों के साथ जवाब दे सकता था, तुमने मुझे इसे हराया :)। – johnc

+0

धन्यवाद, मैं इसे आज़मा दूंगा। – Deepfreezed

2

एक्सएमएल करने के लिए एक शक्तिशाली दावेदार, LINQ मत भूलना!

XElement root = XElement.Load(myfile); 

var foos = root.Descendants("Foo").Where(e => e.Attribute("bar") != null); 
+0

मैं जिस पर काम कर रहा हूं वह नेट 2.0 पर फंस गया है। काश यह मामला नहीं था। – Deepfreezed

+0

अपने प्रोग्राम के संदर्भ में System.Xml.Linq जोड़ने के लिए मत भूलना –

संबंधित मुद्दे