Exemple #1
0
        private IVPackKeyMapAdapter GetKeyMapAdapter(Type type)
        {
            IVPackKeyMapAdapter adapter = this.keyMapAdapters[type];

            if (adapter == null && type.GetTypeInfo().IsEnum)
            {
                adapter = VPackKeyMapAdapters.CreateEnumAdapter(type);
            }

            return(adapter);
        }
Exemple #2
0
        /// <exception cref="System.MissingMethodException"/>
        /// <exception cref="java.lang.IllegalAccessException"/>
        /// <exception cref="java.lang.reflect.InvocationTargetException"/>
        /// <exception cref="VPackException"/>
        private void SerializeMap(
            string name,
            object value,
            VPackBuilder builder,
            Type keyType,
            IDictionary <string, object> additionalFields)
        {
            IDictionary map = (IDictionary)value;

            if (map.Count > 0)
            {
                IVPackKeyMapAdapter keyMapAdapter = this.GetKeyMapAdapter(keyType);
                if (keyMapAdapter != null)
                {
                    builder.Add(name, ValueType.OBJECT);
                    foreach (KeyValuePair <object, object> entry in map)
                    {
                        object entryValue = entry.Value;
                        this.AddValue(
                            keyMapAdapter.Serialize(entry.Key),
                            entryValue != null ? entryValue.GetType() : typeof(object),
                            entry.Value,
                            builder,
                            null,
                            additionalFields);
                    }

                    builder.Close();
                }
                else
                {
                    builder.Add(name, ValueType.ARRAY);
                    foreach (KeyValuePair <object, object> entry in map)
                    {
                        string s = null;
                        builder.Add(s, ValueType.OBJECT);
                        this.AddValue(ATTR_KEY, entry.Key.GetType(), entry.Key, builder, null, additionalFields);
                        this.AddValue(ATTR_VALUE, entry.Value.GetType(), entry.Value, builder, null, additionalFields);
                        builder.Close();
                    }

                    builder.Close();
                }
            }
            else
            {
                builder.Add(name, ValueType.OBJECT);
                builder.Close();
            }
        }
Exemple #3
0
        /// <exception cref="java.lang.InstantiationException"/>
        /// <exception cref="java.lang.IllegalAccessException"/>
        /// <exception cref="System.MissingMethodException"/>
        /// <exception cref="java.lang.reflect.InvocationTargetException"/>
        /// <exception cref="VPackException"/>
        private IDictionary DeserializeMap(VPackSlice parent, VPackSlice vpack, Type type, Type keyType, Type valueType)
        {
            var         info   = type.GetTypeInfo();
            int         length = vpack.GetLength();
            IDictionary value;

            if (typeof(IDictionary).GetTypeInfo().IsAssignableFrom(info) && info.IsClass)
            {
                value = (IDictionary)CreateInstance(type);
            }
            else
            {
                value = new Dictionary <object, object>(length);
            }
            if (length > 0)
            {
                IVPackKeyMapAdapter keyMapAdapter = this.GetKeyMapAdapter(keyType);
                if (keyMapAdapter != null)
                {
                    for (IEnumerator <IEntry <string, VPackSlice> > iterator = vpack.ObjectIterator();
                         iterator.MoveNext();)
                    {
                        IEntry <string, VPackSlice> next = iterator.Current;
                        object name = keyMapAdapter.Deserialize(next.Key);
                        value[name] = GetValue(vpack, next.Value, valueType, name.ToString());
                    }
                }
                else
                {
                    for (int i = 0; i < vpack.GetLength(); i++)
                    {
                        VPackSlice entry    = vpack.Get(i);
                        object     mapKey   = GetValue(parent, entry.Get(ATTR_KEY), keyType, null);
                        object     mapValue = GetValue(parent, entry.Get(ATTR_VALUE), valueType, null);
                        value[mapKey] = mapValue;
                    }
                }
            }

            return(value);
        }