Pulling Images from InfoPath Xml

Sunday, November 23, 2003 8:54:54 PM (Central Standard Time, UTC-06:00)
Working on my InfoPath RSS Poster thing (for the lack of a better name).  Now that I can easily post to my blog using InfoPath I wanted to start taking advantage of also including images in the posts.  Well, I thought it would be pretty straight forward.  I had discovered after doing some exploratory coding that InfoPath happened to be using a serialization technique that was consistent with the XmlSerializer class. 
 
I could serialize an image to xml (storing the image data in a byte array), then manually paste it into InfoPath from my serialization harness and it would render correctly. Well for about the next four hours I pulled out every thing I could think of to figure out exactly how they were serializing the byte array to Xml. I leveraged some research I had done for a serialization presentation and took advantage of a post that Douglas Purdy had blogged on XmlSerialization (it described how to find the *.cs files created during dynamic compilation). That's how I found that the XmlSerializer was calling ToByteArrayBase64. Then I spent some time digging around the System.Xml.Serialization.XmlSerializationReader class in Rotor code to figure out exactly how it read the string contained in the xml to a byte[]. I found the answer in Rotor's xmlserializationreader.cs, they were using Base64 encoding on the byte array. The "magic" code is found here.
 
Now with just a couple of lines of code, I can read the Base64 encoded string and persist it to file as an image. Getting closer now to having images in my posts…