[Opensim-dev] RFC/Proposal: Explicitly serializing SOP rather than relying on .NET automatic serialization.

Frisby, Adam adam at deepthink.com.au
Tue Jun 9 16:16:22 UTC 2009


Speak with Mikko - he wrote a manual parser that reads our formats. We needed it at the time for ModRex.

Overall however +1 on a explicit serialisation. Please leave some room to allow us to tag metadata in too.

Adam

> -----Original Message-----
> From: opensim-dev-bounces at lists.berlios.de [mailto:opensim-dev-
> bounces at lists.berlios.de] On Behalf Of Justin Clark-Casey
> Sent: Tuesday, 9 June 2009 9:04 AM
> To: opensim-dev at lists.berlios.de
> Subject: [Opensim-dev] RFC/Proposal: Explicitly serializing SOP rather
> than relying on .NET automatic serialization.
> 
> Hi there,
> 
> (For reference, I've reproduced this rfc at
> http://opensimulator.org/wiki/Explicit_Object_Serialization but any
> comments
> can be made here).
> 
> 
> Up until now, when we've needed to serialize scene objects (for storage
> in inventory, movement over region borders,
> etc.), we've done so using .NET's automatic XML serialization
> capabilities (XmlSerializer).
> 
> .NET XML serialization is convenient when completely adding or removing
> properties - extraneous XML elements can be
> simply ignored and missing ones just result in the use of a default
> value.
> 
> But if one wants to change an existing element then things get much
> more difficult.  For instance, suppose that you want
> to change the existing UUID CreatorID of SceneObjectPart to be a string
> instead.  Because the CreatorID uses
> OpenMetaverse's UUID object, .NET serialization of this produces the
> following
> 
> <CreatorID><Guid>a6dacf01-4636-4bb9-8a97-
> 30609438af9d</Guid></CreatorID>
> 
> Simply changing the CreatorID type to String in SceneObjectPart will
> cause .NET to look for
> 
> <CreatorID>a6dacf01-4636-4bb9-8a97-30609438af9d</CreatorID>
> 
> on deserialization, making older assets incompatible.  The alternative
> approach of adding a string CreatorID property
> alongside the existing UUID one (e.g. have both CreatorID and
> CreatorIDFull in SceneObjectPart) quickly runs into very
> nasty problems with keeping the fields in sync.
> 
> Therefore, I propose that for SceneObjectPart (and later
> TaskInventoryDictionary) we switch to explicit XML reading and
> writing rather than using .NET serialization.  This will allow object
> serializations to evolve without adding
> increasingly odd code to keep automatic serialization working, if
> that's possible at all (we already have some nasty
> find and replace stuff in
> SceneObjectSerializer.FromOriginalXmlFormat()).  Serialization formats
> will also gain explicit
> version numbers.
> 
> Other parts of scene object serialization, such as script state, will
> remain as they are now.
> 
> Being explicit about serialization may also promote interop and
> modularization.  Explicit serialization can be moved
> away from core and into modules rather than requiring .NET XML
> serialization attributes on fields in SceneObjectPart.
> 
> Naturally, I expect that OpenSim out of the box will always be
> compatible with older serialization formats - migrating
> existing scene object assets is not realistically possible.  Also, I
> propose that the behaviour when adding or removing
> scene object elements (as opposed to changing them) remain the same as
> it does with .NET serialization.  In other words,
> older region simulators will able to read newer object serializations
> simply by ignoring the extra elements.  Only
> changes to existing elements will require a region simulator upgrade
> and these should be rare.
> 
> Comments?
> 
> --
> justincc
> Justin Clark-Casey
> http://justincc.wordpress.com
> _______________________________________________
> Opensim-dev mailing list
> Opensim-dev at lists.berlios.de
> https://lists.berlios.de/mailman/listinfo/opensim-dev



More information about the Opensim-dev mailing list