How to deserialize this nested xml in c# objects

c#, deserialization, xml, xml-deserialization

Solution

You don't need `DisableOthers` class. Just use property with `XmlArrayItem` attribute:

[XmlArrayItem("disableother", IsNullable=false)]
[XmlArray("disableOthers")]
public DisableOther[] DisableOthers { get; set; }

Complete mapping looks like:

[XmlRoot("attributes")]    
public class Attributes
{
    [XmlElement("value")]
    public byte Value { get; set; }

    [XmlElement("showstatus")]
    public string ShowStatus { get; set; }        

    [XmlArray("disableothers")]
    [XmlArrayItem("disableother", IsNullable = false)]
    public DisableOther[] DisableOthers { get; set; }
}

[XmlRoot("disableOther")]
public class DisableOther
{
    [XmlElement("disablevalue")]
    public byte DisableValue { get; set; }

    [XmlElement("todisable")]
    public string[] ToDisable { get; set; }
}

Deserialization:

XmlSerializer serializer = new XmlSerializer(typeof(Attributes));
using (var reader = new StringReader(xmlString))
{
    var attributes = (Attributes)serializer.Deserialize(reader);
    attributes.Dump();
}

Output:

{
  Value: 1,
  ShowStatus: "yes",
  DisableOthers: [
    {
      DisableValue: 1,
      ToDisable: [ "skew", "skew_side" ]
    },
    {
      DisableValue: 0,
      ToDisable: [ "automodel" ]
    }
  ]
}

Problem

I am using silverlight ot achieve deserialisation of xml which looks like this: String xmlString= ``` <attributes> <value>1</value> <showstatus>yes</showstatus> <disableothers> <disableother> <disablevalue>1</disablevalue> <todisable>skew</todisable> <todisable>skew_side</todisable> </disableother> <disableother> <disablevalue>0</disablevalue> <todisable>automodel</todisable> </disableother> </disableothers> </attributes> ``` In my attempt to achieve this i feel like i have something in the classes. The classes are as below: ``` [XmlRoot(ElementName = "attributes")] public class Attributes { [XmlElement("disableOthers")] public List<DisableOthers> DisableOthers { get; set; } } [XmlRoot(ElementName = "disableOthers")] public class DisableOthers { [XmlElement("disableOthers")] public List<DisableOther> DisableOther { get; set; } } [XmlRoot(ElementName = "disableOther")] public class DisableOther { [XmlElement("disablingitem")] public int DisablingItem { get; set; } [XmlElement("todisable")] public int ToDisable { get; set; } [XmlElement("disablevalue")] public int DisableValue { get; set; } } ``` Could some one please correct me if my classes are correct corresponding to the given xml ? Would be a big help. NOTE: The problem exact is when i created object of the parent class then it gives "0" value. And i have already tried it then i came here on stackoverflow.

Original source