[MAPSERVER-USERS] mapObject serialization in C# (variant)

BrainDrain paulborodaev at gmail.com
Mon Jun 9 12:26:52 PDT 2008


Is there any 'standart' fast(!) way/method to serialize (xml/json/other
markup) mapObj in C#? I need it for using server mapObj as JSON on rich
client app running on browser. Look at my method (using reflection): 

public static ListDictionary PartialSerialize(object instance, Stack
callerTypes, Type[] excludeTypes)
        {
            ListDictionary result = new ListDictionary();
            object val;

            callerTypes.Push(instance.GetType());
            PropertyInfo[] pis = instance.GetType().GetProperties();
            foreach (PropertyInfo pi in pis)
            {
                if (pi.PropertyType.IsSerializable &&
!pi.PropertyType.IsArray) 
                    result[pi.Name] = pi.GetValue(instance, new object[0]);
                else
                {
                    //preventing useless nesting
                    if (!callerTypes.Contains(pi.PropertyType) &&
!((IList)excludeTypes).Contains(pi.PropertyType))
                    {
                        val = pi.GetValue(instance, new object[0]);
                        if (val != null)
                            result[pi.Name] = PartialSerialize(val,
callerTypes, excludeTypes);
                    }
                }
            }
            callerTypes.Pop();
            return result;
        }
...
So I can convert mapObj on serever to hashtable automatically an then
populate JSON object
(still need to call explicitly getLayer, getClass etc., but this is not a
problem):
...
layers[i].Properties = Tools.PartialSerialize(layer, new Stack(), new
Type[3] { typeof(mapObj), typeof(hashTableObj), typeof(colorObj)});
...
classes[j].Properties = Tools.PartialSerialize(layerClass, new Stack(), new
Type[4] { typeof(layerObj), typeof(labelObj), typeof(hashTableObj),
typeof(colorObj)});
...
styles[k].Properties = Tools.PartialSerialize(classStyle, new Stack(), new
Type[2]{typeof(hashTableObj), typeof(colorObj)});
...
mapStub.Properties = Tools.PartialSerialize(map, new Stack(), new Type[11] {
typeof(labelObj), typeof(hashTableObj), typeof(fontSetObj),
typeof(labelCacheObj), typeof(outputFormatObj[]), typeof(queryMapObj),
typeof(referenceMapObj), typeof(scalebarObj), typeof(symbolSetObj),
typeof(colorObj), typeof(legendObj)});
...
JavaScriptSerializer class object allows to perform convertion to client
More often I use script method in my web service that can do it behind the
scenes.

How do you do such kind of operation?
-- 
View this message in context: http://www.nabble.com/mapObject-serialization-in-C--%28variant%29-tp17739919p17739919.html
Sent from the Mapserver - User mailing list archive at Nabble.com.




More information about the MapServer-users mailing list