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

BrainDrain paulborodaev at gmail.com
Wed Jun 11 12:57:22 PDT 2008


I use excludeTypes parameter to exclude some properies of mapObj and
child-objects. (see example above)
I decided to do so because I wanted to keep unambiguous conformity between
my custom representation and mapserver object automatically, I wanted to
minimize 'interface' changes.
XML - it will be great, in conjunction with xslt. I love xpath - it brings
db aspect (you're talking about) to life.
I can write xml from mapObj with the same method but with other serializer
(there are many .net object->db mappers available, including object->xml).
And it is possible to read mapObj xml via xslt transformation producing
normal map text file config (not implemented yet, but it will be
sufficiently simple).


Piero Cavalieri wrote:
> 
> I don't know C# mapscript, but are you sure you need to serialize the
> whole mapObj? At the and I think that in your client, you will use: image,
> reference map and scalebar urls, an html (or xml) representation of the
> legend...so why don't to serialize a custom object which contains only
> these things ? I do so, without using mapscript, it's simple...
> 
> Cheers
>  Piero
> 
>> -----Original Message-----
>> From: mapserver-users-bounces at lists.osgeo.org [mailto:mapserver-users-
>> bounces at lists.osgeo.org] On Behalf Of Tamas Szekeres
>> Sent: martedì 10 giugno 2008 19:58
>> To: BrainDrain
>> Cc: mapserver-users at lists.osgeo.org
>> Subject: Re: [MAPSERVER-USERS] mapObject serialization in C# (variant)
>> 
>> Hi,
>> 
>> MapServer currently doesn`t support any other persitence
>> representation than the mapfiles. There have been some initial plans
>> related to an XML format in this list, but no one had any motivation
>> to implement that.
>> So I think the best what you can do at the moment is to use reflection
>> to access the properties along with some other members of the objects
>> and serialize the values manually.
>> 
>> Best regards,
>> 
>> Tamas
>> 
>> 
>> 2008/6/9 BrainDrain <paulborodaev at gmail.com>:
>> >
>> > 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.
>> >
>> > _______________________________________________
>> > mapserver-users mailing list
>> > mapserver-users at lists.osgeo.org
>> > http://lists.osgeo.org/mailman/listinfo/mapserver-users
>> >
>> _______________________________________________
>> mapserver-users mailing list
>> mapserver-users at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/mapserver-users
> _______________________________________________
> mapserver-users mailing list
> mapserver-users at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapserver-users
> 
> 

-- 
View this message in context: http://www.nabble.com/mapObject-serialization-in-C--%28variant%29-tp17739919p17785932.html
Sent from the Mapserver - User mailing list archive at Nabble.com.




More information about the MapServer-users mailing list