Showing posts with label XML. Show all posts
Showing posts with label XML. Show all posts

Friday, November 02, 2007

XmlSerializer Worries and Generating Typed Serializers

The simple constructors of XMLSerializer class caches the typed serializer once it is generated.

When you use XmlSeializer to serialize a type, XmlSerializer will create a dynamic assembly on the fly containing the serialization code. When XmlSerializer is invoked from your application,

  • The XmlSerializer constructor will reflect the type you are passing to the XmlSerializer constructor, and generate the code for typed serializer for the same.
  • The code is compiled by calling csc at run time
  • The resulting assembly is loaded to the application domain, and is cached for future uses.

How ever, there is a known problem with XmlSerializer - some XMLSerializer constructors (other than the simple constructors) will regenerate the typed serializer assembly each time, instead of getting it back from the cache. In other words, XmlSerializer is not using the caching mechanism in every constructor - but only for simple constructors.

Anyway, it is a better practice to generate your serializers at compile time, instead of using XmlSerializer which effects in run time generation of typed serializers. Atleast, this will definitely improve your application performance during startup (for web applications). For desktop applications, you should use typed serializers.

You can use some typed serializer generators like SGen or Mvp.Xml.XGen to generate typed serializers. SGen is not very mature, because it fails to handle a couple of scenarios, and may skip some types with out any warning.

Mvp.Xml.XGen is better.What it does is, pass the type to generate the code to XmlSerializer at design time itself, and then stealing away the code generated by XmlSerializer (and optimize it a little bit), to compile the typed serializer code - and provide you the typed serializer at design time itself.

When you pass a type to XmlSerializer, the code generated can be fetched from the temp folder, provided you requested XmlSerializer constructor not to cleanup the code it has generated. For this, you've to add a hidden switch to your application config file - like

<configuration> <system.diagnostics> <switches> <add name="XmlSerialization.Compilation" value="4"/> </switches> </system.diagnostics> </configuration>

Monday, June 05, 2006

An XML based programming language

I recently found an interesting 'language' from http://xplusplus.sourceforge.net/ - X Plus Plus - which is an object-oriented language that is entirely based on XML's syntactical structure. I had some thoughts about developing a language like this long back, but I felt that XML is not so powerful when it comes to expression handling and evaluation. Just think how much difficult it is, to represent an expression, purely in XML? I just had a quick look at X++. Have a look at it, and it may trigger some new concepts in you.

Articles - Design Patterns, Neural Networks, C#, Programming