I receive xml file like this.
<radio>
<channel id="Opus">
<display-name>Opus</display-name>
<icon src="" />
</channel>
<channel id="Klasika">
<display-name>Klasika</display-name>
<icon src="" />
</channel>
<channel id="LR">
<display-name>LR</display-name>
<icon src="" />
</channel>
<programme channel="Opus" start="20130203060000" stop="20130203110000" duration="050000">
<title lang="lt">OPUS muzika.</title>
<desc lang="lt">OPUS muzika.</desc>
<category lang="lt">muzikos laidos</category>
<date>2013.02.03</date>
</programme>
<programme channel="Opus" start="20130203110000" stop="20130203150000" duration="040000">
<title lang="lt">Vėlyvi pusryčiai su OPUS.</title>
<desc lang="lt">Vėlyvi pusryčiai su OPUS.</desc>
<category lang="lt">muzikos laidos</category>
<date>2013.02.03</date>
</programme>
</radio>
with many instances of programme and channel. I try to deserialize it into this c# object but I get a null instead of object:
[XmlRoot("radio")]
public sealed class radio
{
[XmlRoot("channel")]
public sealed class channel
{
[XmlAttribute("id")]
public string id { get; set; }
[XmlElement("display-name")]
public string displayName { get; set; }
[XmlElement("icon")]
public string icon { get; set; }
public channel()
{
}
}
[XmlRoot("programme")]
public sealed class programme
{
[XmlAttribute("channel")]
public string channel { get; set; }
[XmlAttribute("start")]
public string start { get; set; }
[XmlAttribute("stop")]
public string stop { get; set; }
[XmlAttribute("duration")]
public string duration { get; set; }
[XmlElement("title")]
public string title { get; set; }
[XmlElement("desc")]
public string desc { get; set; }
[XmlElement("category")]
public string category { get; set; }
[XmlElement("date")]
public string date { get; set; }
public programme()
{
}
}
[XmlArray]
public channel[] channels { get; set; }
[XmlArray]
public programme[] programmes { get; set; }
public radio()
{
channels = null;
programmes = null;
}
public static radio FromXmlString(string xmlString)
{
var reader = new StringReader(xmlString);
var serializer = new XmlSerializer(typeof(radio));
var instance = (radio)serializer.Deserialize(reader);
return instance;
}
}
What am I doing wrong and what would be the proper xml object class?
To deserialize the objects, call the Deserialize method with the FileStream as an argument. The deserialized object must be cast to an object variable of type PurchaseOrder . The code then reads the values of the deserialized PurchaseOrder .
Serialization is a process by which an object's state is transformed in some serial data format, such as XML or binary format. Deserialization, on the other hand, is used to convert the byte of data, such as XML or binary data, to object type.
XML serialization is the process of converting an object's public properties and fields to a serial format (in this case, XML) for storage or transport. Deserialization re-creates the object in its original state from the XML output.
You will just have to change you Radio
class a bit, since the 2 object types a mixed in the same array you will have to add some attributes to let the serializer know whats what.
[XmlRoot("radio")]
public sealed class radio
{
[XmlElement("channel", Type = typeof(channel))]
public channel[] channels { get; set; }
[XmlElement("programme", Type = typeof(programme))]
public programme[] programmes { get; set; }
public radio()
{
channels = null;
programmes = null;
}
public static radio FromXmlString(string xmlString)
{
var reader = new StringReader(xmlString);
var serializer = new XmlSerializer(typeof(radio));
var instance = (radio)serializer.Deserialize(reader);
return instance;
}
}
[Serializable]
public class channel
{
[XmlAttribute("id")]
public string id { get; set; }
[XmlElement("display-name")]
public string displayName { get; set; }
[XmlElement("icon")]
public string icon { get; set; }
public channel()
{
}
}
[Serializable]
public sealed class programme
{
[XmlAttribute("channel")]
public string channel { get; set; }
[XmlAttribute("start")]
public string start { get; set; }
[XmlAttribute("stop")]
public string stop { get; set; }
[XmlAttribute("duration")]
public string duration { get; set; }
[XmlElement("title")]
public string title { get; set; }
[XmlElement("desc")]
public string desc { get; set; }
[XmlElement("category")]
public string category { get; set; }
[XmlElement("date")]
public string date { get; set; }
public programme()
{
}
}
Results:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With