Click here to Skip to main content
15,895,011 members
Articles / Mobile Apps / Windows Mobile

XML Serialization of Generic Dictionary, Multidimensional Array, and Inherited Type, with sharpSerializer .NET

Rate me:
Please Sign up or sign in to vote.
4.92/5 (48 votes)
9 Nov 2011CPOL8 min read 251.5K   2.9K   122  
How to serialize to XML, any generic, derived, or other complex type, which XMLSerializer cannot serialize
using System;
using System.Collections.Generic;
using System.Reflection;

namespace Polenter.Serialization.Advanced
{
    ///<summary>
    /// Supports multithreading. It's slower but neccessary, 
    /// because Compact Framework does not support ThreadStaticAttribute.
    ///</summary>
    internal class PropertyCache
    {
        private readonly Dictionary<Type, IList<PropertyInfo>> _cache = new Dictionary<Type, IList<PropertyInfo>>();

        /// <summary>
        /// </summary>
        /// <returns>null if the key was not found</returns>
        public IList<PropertyInfo> TryGetPropertyInfos(Type type)
        {
            lock (_cache)
            {
                if (!_cache.ContainsKey(type))
                {
                    return null;
                }
                return _cache[type];
            }
        }

        /// <summary>
        /// If the key exists, the value will not be added.
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        public void Add(Type key, IList<PropertyInfo> value)
        {
            lock (_cache)
            {
                if (_cache.ContainsKey(key))
                {
                    return;
                }
                _cache.Add(key, value);
            }
        }
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior) Polenter - Software Solutions
Germany Germany
I'm C# developer from Cologne, Germany. Here I owe a small software company. My hobby is general optimization - natural talent of all lazy people Wink | ;-)

Comments and Discussions