I’ve had several occasions now where someone with Sogeti or someone at a client has
had a “truly mysterious” problem where the XmlSerializer was throwing an error which
the programmer simply couldn’t understand. When situations like this arise,
I find myself reaching for a great
post written by Scott Hanselman on this issue which I will repeat the meat of
which here so that I’ve got a copy of my own.
If you find yourself needing to debug the code generated by the XmlSerializer to serialize
or deserialize your type, here is what you need to do:
1. Modify your app.config or web.config to include the following:
1: <? xml version ="1.0" encoding ="utf-8" ?>
2: < configuration >
3: < system.diagnostics >
4: < switches >
5: < add name ="XmlSerialization.Compilation" value ="1" />
6: </ switches >
7: </ system.diagnostics >
8: </ configuration >
2. Recompile your application and set a break point just after you create your XmlSerializer.
3. Open the directory “C:\Documents and Settings\[username]\Local Settings\Temp”
4. Find the .CS file with the most recent timestamp, it will have a random file name.
5. Open that file in the same Visual Studio you’ve got debugging, and set a break
point.
6. Debug to your hearts content.
Important to remember at this point is that this code is generated by the system and
is meant to be fast, not friendly. You’ll need to be very familiar with the
XmlReader object or you won’t understand how it is doing what it is doing. Also
realize that you can’t control that code, you can only control the attributes on the
Type you gave it, and from that it will generate the code as it sees fit.
Side Note : One of the classic performance mistakes I see people
make when they start doing a lot of XML serialization is to create the XmlSerializer
object every time they need one. The constructor of the XmlSerializer
is the most expensive part of it’s operations. It is there that the code is
generated which you are debugging above, and so once you’ve created an XmlSerializer
if you’ve got a reasonable expectation of needing it again then keep it around!