Diyelim ki aşağıdaki gibi bir xml dosyanız var :
<?xml version="1.0" encoding="UTF-8"?>
<MyRootName>
<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>
</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.
- root içinde MySub adlı bir çok elementimiz var. MySub c# da bir liste'ye denk eliyor
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.
C# model'ini oluşturalım :
MyRootName için > MyModelRootName class'ını oluşturalım (Not : bu class ın bir den çok MySub'ı olmalı).
MySub için > SubOfRoot class'ını oluşturalım. SubOfRoot un 2 tane property'si olmak zorunda (inceleyelim'deki 2. adım).
MyValueWithAttr için > YourPropThatHaveAttr class'ını oluşturalım ve içerisinde attribute için bir string değeri ve kendi değeri için string değeri olması gerekiyor.
YourPropThatHaveAttr class'ını > SubOfRoot class'ına property olarak verellim.
Not: Yazılardan anlaşılması biraz zor. Önce koda bakıp daha sonra yazdıklarımı incelerseniz daha kolay anlaşılır.
[XmlRoot(elementName:"MyRootName")]
public class MyModelRootName
{
[XmlElement("MySub")]
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; }
}
C# modelini oluşturduk daha sonra deserialize etme vakti :
var xmlOutput = File.ReadAllText(@"yourxmlfolderpath\MyXml1.xml");
XmlSerializer xmlSerialize = new XmlSerializer(typeof(MyModelRootName));
var xmlResult = xmlSerialize.Deserialize(new StringReader(xmlOutput));
Top comments (0)