protected static ObjectUnserializer Get(HproseMode mode, Type type, string[] names, CreateObjectUnserializerDelegate createObjectUnserializer)
        {
            CacheKey           key          = new CacheKey(mode, type, names);
            ObjectUnserializer unserializer = null;

            try {
#if (dotNET35 || dotNET4)
                unserializersCacheLock.EnterReadLock();
#else
                unserializersCacheLock.AcquireReaderLock(-1);
#endif
                if (unserializersCache.TryGetValue(key, out unserializer))
                {
                    return(unserializer);
                }
            }
            finally {
#if (dotNET35 || dotNET4)
                unserializersCacheLock.ExitReadLock();
#else
                unserializersCacheLock.ReleaseReaderLock();
#endif
            }
            try {
#if (dotNET35 || dotNET4)
                unserializersCacheLock.EnterWriteLock();
#else
                unserializersCacheLock.AcquireWriterLock(-1);
#endif
                if (unserializersCache.TryGetValue(key, out unserializer))
                {
                    return(unserializer);
                }
                unserializer            = createObjectUnserializer(type, names);
                unserializersCache[key] = unserializer;
            }
            finally {
#if (dotNET35 || dotNET4)
                unserializersCacheLock.ExitWriteLock();
#else
                unserializersCacheLock.ReleaseWriterLock();
#endif
            }
            return(unserializer);
        }
 public static ObjectUnserializer Get(Type type, string[] names)
 {
     return(ObjectUnserializer.Get(HproseMode.MemberMode, type, names, CreateObjectUnserializer));
 }
Beispiel #3
0
 public static ObjectUnserializer Get(Type type, string[] names)
 {
     return(ObjectUnserializer.Get(HproseMode.FieldMode | HproseMode.PropertyMode, type, names, CreateObjectUnserializer));
 }