myWorld
myWorld

Reputation: 49

I get an exception during deserialization

I get this message when running the code below:

There is an error in XML document (6, 22).

namespace N1
{
    public class InputEntry
    {
        //FieldName is a class tht is generated from an XSD which has complex type Name and value
        private Field fields;
        public Field[] Fields
        {
            get { return this.fields; }
            set { this.fields= value; }
        }

        public string FieldName
        {
           get{return this.fieldName;}
           set { this.fieldName = value; }
        }

       public string FieldValue
       {
        get {return this.fieldValue; }
        set {this.fieldValue = value;}
       }
    }

    public class B
    {
        public void Method1()
        {
            InputEntry inputEntry = new InputEntry();
            //we some how get the values from user and assign them to
            Field f1 = new Field();
            f1.FieldName = "PRINTLINE00";
            f1.FieldValue = "DENIAL STATE" ;
        }

        private void Method2(InputEntry inputEntry)
        {
            System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(InputEntry));
            System.IO.StringWriter inputStr = new System.IO.StringWriter(CultureInfo.InvariantCulture);
            serializer.Serialize(inputStr, inputEntry);
            string ipEntry = inputStr.ToString();
            Method3(ipEntry);
        }

        private void Method3(string ipEntry)
        {
            System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(InputEntry));
            System.IO.StringReader inputStr = new System.IO.StringReader(ipEntry);
            InputEntry inputEntry = (InputEntry)serializer.Deserialize(inputStr);

        }
    }
}
     // when client configues input data as
     // <FieldName>PRINTLINE00</FieldName> <FieldValue>DENIAL STATE</FieldValue>,
     //I get an exception when the same data deserialised
     //Exception is:-

String:

<?xml version="1.0" encoding="utf-16"?>
<InputEntry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <Fields>
    <Field>
      <FieldName>PRINTLINE00</FieldName>
      <FieldValue>&#x1B;DENIAL STATE 217</FieldValue>
    </Field>
  </Fields>
</InputEntry>

Upvotes: 2

Views: 2100

Answers (4)

Anton Tykhyy
Anton Tykhyy

Reputation: 20086

You need to turn off character checking, something like this:

serializer.Deserialize (XmlReader.Create (inputStr, new XmlReaderSettings
    { CheckCharacters = false, }))

Upvotes: 1

dkackman
dkackman

Reputation: 15579

<FieldName>PRINTLINE00</FieldName> <FieldValue**>**DENIAL STATE</FieldValue>

missing an <

Upvotes: 0

Jon Skeet
Jon Skeet

Reputation: 1503110

Aside from the fact that you're missing a closing Fields tag, you've also tried to serialise Unicode character U+001B... which unfortunately isn't supported in XML.

That's an "escape" character... did you really want it in the string to start with? It could be that you can just add validation (or trimming) in your code.

Upvotes: 7

Klaus Byskov Pedersen
Klaus Byskov Pedersen

Reputation: 121037

There's a missing </Fields> tag in your xml document.

Upvotes: 2

Related Questions