मुझे एहसास है कि यह एक पुरानी पोस्ट है, लेकिन मैं हाल ही में ऑब्जेक्ट्स में XML का कुछ पढ़ रहा हूं। मैं लिंक पर एक्सएमएल पर उत्सुक नहीं था - यह बहुत पठनीय नहीं है, "जादू तार" पर निर्भर करता है, और एक्सएमएल स्कीमा में बदलाव होने पर कोड परिवर्तन की आवश्यकता होती है।
रुचि रखने वाले किसी भी व्यक्ति के लिए, मैं XmlSerializer
कक्षा का उपयोग ऑब्जेक्ट में XML को deserialize करने के लिए करता हूं। एक सामान्य सहायक विधि में अक्रमांकन कोड रखो, और देखा - कोड की एक पंक्ति का एक वस्तु ग्राफ में एक XML फ़ाइल deserialize करने के लिए: -
using System.IO;
using System.Xml.Serialization;
class Program
{
static void Main(string[] args)
{
var xml = @"<?xml version='1.0' encoding='utf-8' ?>
<Model>
<Points>
<Point name='P1' pressure='1'>
<Fractions>
<Fraction id='aaa' value='0.15272159'/>
<Fraction id='bbb' value='0.15272159'/>
</Fractions>
</Point>
</Points>
</Model>";
var model = DeserializeObject<Model>(xml);
}
private static T DeserializeObject<T>(string xml)
{
var serializer = new XmlSerializer(typeof(T));
using (var tr = new StringReader(xml))
{
return (T)serializer.Deserialize(tr);
}
}
}
public class Model
{
[XmlArrayItem("Point")]
public Point[] Points { get; set; }
}
public class Point
{
[XmlAttribute(AttributeName = "name")]
public string Name { get; set; }
[XmlAttribute(AttributeName = "pressure")]
public int Pressure { get; set; }
[XmlArrayItem("Fraction")]
public Fraction[] Fractions { get; set; }
}
public class Fraction
{
[XmlAttribute(AttributeName = "id")]
public string Id { get; set; }
[XmlAttribute(AttributeName = "value")]
public double Value { get; set; }
}
चेतावनियां के एक जोड़े: -
यह समाधान स्पष्ट रूप से निर्भर करता है XML विशेषताओं वाले डोमेन मॉडल को सजाने पर, जो आपको स्वीकार्य हो सकता है या नहीं भी। समाधान एक्सएमएल में मौजूद बाहरी तत्व पर भी निर्भर करता है, और यदि रूट तत्व एक सरणी है (<Points>
इस उदाहरण में) तो काम नहीं करेगा।
IEnumerable<>
निर्दिष्ट करना संभव नहीं है (जिसे ओपी का उल्लेख किया गया है); आप सरणी या List<>
का उपयोग कर सकते हैं।
स्रोत
2014-04-01 10:47:55
शायद शून्य के लिए जांचना चाहें या आपका आवेदन विस्फोट हो जाएगा। –
@ वाउटर: धन्यवाद! यह बहुत अच्छा काम करता है। क्या मैं सबक्वायरी बना सकता हूं? या दो प्रश्न पूछना होगा? मेरा संपादन देखें कृपया –
@PedroDusso मैंने नेस्टेड चयन के लिए कुछ कोड जोड़ा है –