// This is my xml data I am trying to map this to my .net classes. By converting XML to json and json back to C# classes.
       string xml = @"  <ReportTemplate>
      <Page Id='1' LayoutId='1'>
        <Section Id='1'>
          <Body>TEststindfgdfgf</Body>
        </Section>`enter code here`
        <Section Id='2'>
          <Content Id='9834ebcd0e9537c315a42cf0d8ed32745f89827c' Type='News'></Content>
        <Content Id='9834ebcd0e9537c315a42cf0d8ed32745f89827c' Type='News' ></Content>
        </Section>
        <Section Id='3'>
           <Content Id='9834ebcd0e9537c315a42cf0d8ed32745f89827c' Type='News'></Content>
        </Section>
      </Page>
      <Page Id='2' LayoutId='1'>
        <Section Id='1'>
           <Content Id='9834ebcd0e9537c315a42cf0d8ed32745f89827c' Type='News'></Content>
          <Content Id='9834ebcd0e9537c315a42cf0d8ed32745f89827c' Type='News'></Content>
        </Section>
        <Section Id='2'>
           <Content Id='9834ebcd0e9537c315a42cf0d8ed32745f89827c' Type='News'></Content>
        </Section>
        <Section Id='3'>
          <Body>dfgdgggf;</Body>
        </Section>
      </Page>
    </ReportTemplate>";
        public class ReportTemplate
        {
              public List<Page> Page { get; set; }
        }
        public class Page
        {
            public string Id { get; set; }
            public string LayoutId { get; set; }
            public List<Section> Section { get; set; }
        }
        public class Section
        {
            public string Id { get; set; }
            public string Body { get; set; }
            public List<Content> Content { get; set; }
        }
        public class Content
        {
            public string Id { get; set; }
            public string Type { get; set; }
        }
var xmldoc = new XmlDocument();
xmldoc.LoadXml(xml);
var json = JsonConvert.SerializeXmlNode(xmldoc,Newtonsoft.Json.Formatting.Indented, true);
var obj = JsonConvert.DeserializeObject<ReportTemplate>(Regex.Replace(json, "(?<=\")(@)(?!.*\":\\s )", string.Empty, RegexOptions.IgnoreCase));
//This is the error that i am getting
Newtonsoft.Json.JsonSerializationException: 'Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1[LintoXML.Program+Content]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly. To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object. Path 'Page[0].Section[2].Content.Id', line 27, position 17.'
Once you have serialized the XML into JSON, copy the JSON and generate the classes for it by referring this answer. Here are the classes:
public class Rootobject
{
    public Reporttemplate ReportTemplate { get; set; }
}
public class Reporttemplate
{
    public Page[] Page { get; set; }
}
public class Page
{
    public string Id { get; set; }
    public string LayoutId { get; set; }
    public Section[] Section { get; set; }
    public string text { get; set; }
}
public class Section
{
    public string Id { get; set; }
    public string Body { get; set; }
    public object Content { get; set; }
}
Then deserialize the JSON into those classes:
var xmldoc = new XmlDocument();
xmldoc.LoadXml(xml);
var fromXml = JsonConvert.SerializeXmlNode(xmldoc);
var fromJson = JsonConvert.DeserializeObject<Rootobject>(fromXml);
                        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