0

I get this error when deserialize a Xml response from server:

There is an error in XML document (2, 2). was not expected.

This is my response xml:

<?xml version="1.0" encoding="utf-8"?>
<RK7QueryResult ServerVersion="7.6.5.515" XmlVersion="248" NetName="RK7_TEST" Status="Ok" CMD="GetRefList" ErrorText="" DateTime="2022-08-11T09:44:22" WorkTime="156" Processed="1" ArrivalDateTime="2022-08-11T09:44:22">
    <RK7RefList Count="154">
        <RK7Reference RefName="ALIASES" Count="25" DataVersion="1681"/>
        <RK7Reference RefName="ALIASLANGUAGES" Count="29" DataVersion="2117"/>
    </RK7RefList>
</RK7QueryResult>

My Object:

[XmlRoot("RK7QueryResult")]
    public class ReferenceResponse
    {
        [XmlElement("ServerVersion")]
        public string ServerVersion { get; set; }

        [XmlElement("XmlVersion")]
        public int XmlVersion { get; set; }

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

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

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

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

        [XmlElement("DateTime")]
        public DateTime DateTime { get; set; }

        [XmlElement("WorkTime")]
        public int WorkTime { get; set; }

        [XmlElement("Processed")]
        public int Processed { get; set; }

        [XmlElement("ArrivalDateTime")]
        public DateTime ArrivalDateTime { get; set; }

        [XmlArray("RK7RefList")]
        public List<Reference> RK7RefList { get; set; }
    }

    [XmlRoot("RK7Reference")]
    public class Reference
    {
        [XmlElement("RefName")]
        public string RefName { get; set; }
        [XmlElement("Count")]
        public int Count { get; set; }
        [XmlElement("DataVersion")]
        public int DataVersion { get; set; }
    }

And my deserialization:

XmlSerializer serializer = new XmlSerializer(typeof(string));
                using (TextReader reader = new StringReader(response.Data))
                {
                    var result = (ReferenceResponse)serializer.Deserialize(reader);
                }

I have searched many solution in here and tried but it isn't work for me, Did my object was worng or something else? Sorry for my bad english.

wohlstad
  • 12,661
  • 10
  • 26
  • 39
Minh Kim
  • 23
  • 4

1 Answers1

0

You are initializing the serializer with "string" instead of the type you want to deserialize

XmlSerializer serializer = new XmlSerializer(typeof(ReferenceResponse));

and you should use [XmlAttribute] in your class for attributes.

This should work:

using System;
using System.Xml.Serialization;
using System.IO;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        var xml = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<RK7QueryResult ServerVersion=""7.6.5.515"" XmlVersion=""248"" NetName=""RK7_TEST"" Status=""Ok"" CMD=""GetRefList"" ErrorText="""" DateTime=""2022-08-11T09:44:22"" WorkTime=""156"" Processed=""1"" ArrivalDateTime=""2022-08-11T09:44:22"">
    <RK7RefList Count=""154"">
        <RK7Reference RefName=""ALIASES"" Count=""25"" DataVersion=""1681""/>
        <RK7Reference RefName=""ALIASLANGUAGES"" Count=""29"" DataVersion=""2117""/>
    </RK7RefList>
</RK7QueryResult>";
            
        XmlSerializer serializer = new XmlSerializer(typeof(ReferenceResponse));
        using (TextReader reader = new StringReader(xml))
        {
            var result = (ReferenceResponse)serializer.Deserialize(reader);
            Console.WriteLine(result.ServerVersion);
            Console.WriteLine(result.RK7RefList[0].RefName);            
        }           
    }
}

[XmlRoot("RK7QueryResult")]
public class ReferenceResponse
{
    [XmlAttribute("ServerVersion")]
    public string ServerVersion { get; set; }

    [XmlAttribute("XmlVersion")]
    public int XmlVersion { get; set; }

    [XmlAttribute("NetName")]
    public string NetName { get; set; }

    [XmlAttribute("CMD")]
    public string CMD { get; set; }

    [XmlAttribute("Status")]
    public string Status { get; set; }

    [XmlAttribute("ErrorText")]
    public string ErrorText { get; set; }

    [XmlAttribute("DateTime")]
    public DateTime DateTime { get; set; }

    [XmlAttribute("WorkTime")]
    public int WorkTime { get; set; }

    [XmlAttribute("Processed")]
    public int Processed { get; set; }

    [XmlAttribute("ArrivalDateTime")]
    public DateTime ArrivalDateTime { get; set; }

    [XmlArray("RK7RefList")]
    [XmlArrayItem("RK7Reference")]
    public List<Reference> RK7RefList { get; set; }
}

[XmlRoot("RK7Reference")]
public class Reference
{
    [XmlAttribute("RefName")]
    public string RefName { get; set; }
    [XmlAttribute("Count")]
    public int Count { get; set; }
    [XmlAttribute("DataVersion")]
    public int DataVersion { get; set; }
}
Paolo Iommarini
  • 219
  • 2
  • 9