Diyelim ki aşağıdaki gibi MyXml2.xml dosyamız olsun :
<?xml version="1.0" encoding="UTF-8"?> <MyRootName> <SubParent> <MySub> <MyValue1> 5 </MyValue1> <MyValue2> <![CDATA[Something2]]> </MyValue2> <MyValueWithAttr ValueOfElementsAttribute="SomethingAttr"> <![CDATA[Something3]]> </MyValueWithAttr> </MySub> <MySub> <MyValue1> 5 </MyValue1> <MyValue2> <![CDATA[Something2]]> </MyValue2> <MyValueWithAttr ValueOfElementsAttribute="SomethingAttr"> <![CDATA[Something3]]> </MyValueWithAttr> </MySub> <MySub> <MyValue1> 5 </MyValue1> <MyValue2> <![CDATA[Something2]]> </MyValue2> <MyValueWithAttr ValueOfElementsAttribute="SomethingAttr"> <![CDATA[Something3]]> </MyValueWithAttr> </MySub> <MySub> <MyValue1> 5 </MyValue1> <MyValue2> <![CDATA[Something2]]> </MyValue2> <MyValueWithAttr ValueOfElementsAttribute="SomethingAttr"> <![CDATA[Something3]]> </MyValueWithAttr> </MySub> <MySub> <MyValue1> 5 </MyValue1> <MyValue2> <![CDATA[Something2]]> </MyValue2> <MyValueWithAttr ValueOfElementsAttribute="SomethingAttr"> <![CDATA[Something3]]> </MyValueWithAttr> </MySub> <MySub> <MyValue1> 5 </MyValue1> <MyValue2> <![CDATA[Something2]]> </MyValue2> <MyValueWithAttr ValueOfElementsAttribute="SomethingAttr"> <![CDATA[Something3]]> </MyValueWithAttr> </MySub> </SubParent> </MyRootName>
Ve bunu c# class'ına deserialize etmek istiyorsunuz :
Bunun için öncelikle xml inceleyelim :
MyRootName adında bir root'umuz var. MyRootName c# da bir class a denk geliyor.
MyRootName içinde bir bir SubParent'ımız var ve bu SubParent bir MySub'ları içeren bir array.
mysub ın altında value lerimiz varve bunların ilk 2 si c# da property'ye denk geliyor.
MyValueWithAttr adında iki tane değeri olan(attribute değeri ve kendi değeri) olan bir xml elementimiz var. 2 tane değer olduğundan dolayı bir class gerekiyor.
Direkt model'e geçmek istiyorum :
[XmlRoot(elementName:"MyRootName")] public class MyModelRootName { [XmlArray("SubParent")] // dikkat 1 yazı ile farkı buralar [XmlArrayItem("MySub")] // dikkat 1 yazı ile farkı buralar public List<SubOfRoot> SubOfRoots { get; set; } } public class SubOfRoot { [XmlElement(elementName: "MyValue1")] public int YourValue1 { get; set; } [XmlElement(elementName: "MyValue2")] public string YourValue2 { get; set; } [XmlElement(elementName: "MyValueWithAttr")] public YourPropThatHaveAttr YourPropThatHaveAttr { get; set; } } public class YourPropThatHaveAttr { [XmlText] public string ValueOfElement { get; set; } [XmlAttribute] public string ValueOfElementsAttribute { get; set; } }
Bu serinin 1. yazısını okuduysanız tek farkın Root içerisinde XmlElement yerine XmlArray ve XmlArrayItem kullandığımız görebilirisiniz.
Yani aslında root elementi için konuşursak : Eğer bir root unuz var ve içerisinde root'a ait birden çok item bulunuyorsa (Root>n*Sub) XmlElement kullanmalısınız. Eğer Root içerisinde bir element ve bu elementin içerisinde bir den çok item (Root>SubParent>n*Sub) bulunuyorsa XmlArray ve XmlArrayItem kullanmalısınız.
Kullanım :
var xmlOutput = File.ReadAllText(@"yourFolderPath\MyXml2.xml"); XmlSerializer xmlSerialize = new XmlSerializer(typeof(MyModelRootName)); var xmlResult = xmlSerialize.Deserialize(new StringReader(xmlOutput));
Bir dahaki yazıda biraz dahafazla kompleks bir örnek vereceğim şimdilik görüşmek üzere.
Top comments (0)