BBR
BBR

Reputation: 131

Boolean Deserialization Error

I am having problems with deserializeation for an XML element, I am assuming it is something to do with the namespace in the XML element not being found by the deserializer.

The data is coming form an outside source, which I cannot modify as a string and I am using C# 4.0.

Any help, gratefully appreciated.

string xml = "<boolean xmlns=\"http://schemas.microsoft.com/2003/10/serialization/\">false</boolean>";

var xSerializer = new XmlSerializer(typeof(bool));
using (var sr = new StringReader(xml)) 
using (var xr = XmlReader.Create(sr))
{
    var y = xSerializer.Deserialize(xr);
}

Error:

System.InvalidOperationException was unhandled by user code
  HResult=-2146233079
  Message=There is an error in XML document (1, 2).
  Source=System.Xml
  StackTrace:
       at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
       at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle)
            ...
            ...
            ...
  InnerException: System.InvalidOperationException
       HResult=-2146233079
       Message=<boolean xmlns='http://schemas.microsoft.com/2003/10/serialization/'> was not expected.
       Source=System.Xml
       StackTrace:
            at System.Xml.Serialization.XmlSerializationPrimitiveReader.Read_boolean()
            at System.Xml.Serialization.XmlSerializer.DeserializePrimitive(XmlReader xmlReader, XmlDeserializationEvents events)
            at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
       InnerException: 

Upvotes: 2

Views: 1746

Answers (2)

L.B
L.B

Reputation: 116168

It will work if you create your serializer as below

var xSerializer = new XmlSerializer(typeof(bool),null, null, 
                         new XmlRootAttribute("boolean"), 
                         "http://schemas.microsoft.com/2003/10/serialization/");

Upvotes: 3

Omar
Omar

Reputation: 16623

You can't use xml namespaces and attributes if you want to deserialize a boolean. Infact you have to deserialize this:

string xml = "<boolean>false</boolean>";

Upvotes: 0

Related Questions