Пример #1
0
        protected virtual void DeserializeDictionaryKeyValuePair(DictionaryMapping mapping, IDictionary dictionary, TDeserializeState state)
        {
            var keyInstance   = DeserializeDictionaryKey(mapping, state);
            var valueInstance = DeserializeDictionaryValue(mapping, state);

            dictionary.Add(keyInstance, valueInstance);
        }
Пример #2
0
        public virtual DictionaryMapping CreateDictionaryMappingFor(PropertyInfo propertyInfo, string scope)
        {
            var propertyType = propertyInfo.PropertyType;

            var dictionaryTypes = TypeAnalyzer.GetGenericTypes(propertyType, typeof(IDictionary <,>));

            var keyType   = dictionaryTypes[0];
            var valueType = dictionaryTypes[1];

            var dictionaryMapping = new DictionaryMapping
            {
                LocalName          = propertyInfo.Name,
                ScopedName         = scope,
                KeyType            = keyType,
                ValueType          = valueType,
                Type               = propertyInfo.PropertyType,
                GetValue           = (x) => propertyInfo.GetValue(x, null) as IDictionary,
                SetValue           = (x, v) => propertyInfo.SetValue(x, v, null),
                IsKeyDynamicType   = TypeAnalyzer.IsDynamicType(keyType),
                IsValueDynamicType = TypeAnalyzer.IsDynamicType(valueType)
            };

            var keyMappingTypes = GetMappingsFromType(keyType, scope);

            dictionaryMapping.KeyMappings.AddRange(keyMappingTypes);

            var valueMappingTypes = GetMappingsFromType(valueType, scope);

            dictionaryMapping.ValueMappings.AddRange(valueMappingTypes);

            return(dictionaryMapping);
        }
Пример #3
0
        protected override void DeserializeDictionaryKeyValuePair(DictionaryMapping mapping, IDictionary dictionary, XElement state)
        {
            var keyElement    = state.Element(XmlSerializer.KeyElementName);
            var keyInstance   = DeserializeDictionaryKey(mapping, keyElement);
            var valueElement  = state.Element(XmlSerializer.ValueElementName);
            var valueInstance = DeserializeDictionaryValue(mapping, valueElement);

            dictionary.Add(keyInstance, valueInstance);
        }
Пример #4
0
        protected IDictionary CreateDictionaryFromMapping(DictionaryMapping mapping)
        {
            if (MappingRegistry.TypeMapper.TypeAnalyzer.IsGenericDictionary(mapping.Type))
            {
                return(TypeCreator.CreateDictionary(mapping.KeyType, mapping.ValueType));
            }

            return((IDictionary)TypeCreator.Instantiate(mapping.Type));
        }
Пример #5
0
        protected override void DeserializeDictionaryKeyValuePair(DictionaryMapping mapping, IDictionary dictionary, JToken state)
        {
            var keyElement    = state[JsonSerializer.KeyField];
            var keyInstance   = DeserializeDictionaryKey(mapping, keyElement);
            var valueElement  = state[JsonSerializer.ValueField];
            var valueInstance = DeserializeDictionaryValue(mapping, valueElement);

            dictionary.Add(keyInstance, valueInstance);
        }
Пример #6
0
        protected override void SerializeDictionaryKeyValuePair(DictionaryMapping dictionaryMapping, IDictionary dictionary, object key, JToken state)
        {
            var keyElement   = new JObject();
            var valueElement = new JObject();

            state[KeyField]   = keyElement;
            state[ValueField] = valueElement;

            SerializeDictionaryKey(dictionaryMapping, key, keyElement);
            SerializeDictionaryValue(dictionaryMapping, dictionary[key], valueElement);
        }
Пример #7
0
        protected override void SerializeDictionaryKeyValuePair(DictionaryMapping dictionaryMapping, IDictionary dictionary, object key, XElement state)
        {
            var keyElement = new XElement(KeyElementName);

            SerializeDictionaryKey(dictionaryMapping, key, keyElement);

            var valueElement = new XElement(ValueElementName);

            SerializeDictionaryValue(dictionaryMapping, dictionary[key], valueElement);

            var keyValuePairElement = new XElement(KeyValuePairElementName);

            keyValuePairElement.Add(keyElement, valueElement);
            state.Add(keyValuePairElement);
        }
Пример #8
0
        protected virtual void SerializeDictionary <T>(DictionaryMapping dictionaryMapping, T data, TSerializeState state)
        {
            var objectValue = AttemptGetValue(dictionaryMapping, data, state);

            if (objectValue == null)
            {
                return;
            }
            var dictionaryValue = (objectValue as IDictionary);

            AddCountToState(state, dictionaryValue.Count);
            foreach (var key in dictionaryValue.Keys)
            {
                SerializeDictionaryKeyValuePair(dictionaryMapping, dictionaryValue, key, state);
            }
        }
Пример #9
0
        protected virtual void SerializeDictionaryKey(DictionaryMapping dictionaryMapping, object key, TSerializeState state)
        {
            if (dictionaryMapping.IsKeyDynamicType)
            {
                SerializeDynamicTypeData(key, state);
                return;
            }

            if (dictionaryMapping.KeyMappings.Count > 0)
            {
                Serialize(dictionaryMapping.KeyMappings, key, state);
            }
            else
            {
                SerializePrimitive(key, dictionaryMapping.KeyType, state);
            }
        }
Пример #10
0
        protected virtual void DeserializeDictionary <T>(DictionaryMapping mapping, T instance, TDeserializeState state)
        {
            if (IsObjectNull(state))
            {
                mapping.SetValue(instance, null);
                return;
            }

            var count      = GetCountFromState(state);
            var dictionary = CreateDictionaryFromMapping(mapping);

            mapping.SetValue(instance, dictionary);

            for (var i = 0; i < count; i++)
            {
                DeserializeDictionaryKeyValuePair(mapping, dictionary, state);
            }
        }
Пример #11
0
        protected override void DeserializeDictionary <T>(DictionaryMapping mapping, T instance, XElement state)
        {
            if (IsObjectNull(state))
            {
                mapping.SetValue(instance, null);
                return;
            }

            var count      = GetCountFromState(state);
            var dictionary = CreateDictionaryFromMapping(mapping);

            mapping.SetValue(instance, dictionary);

            for (var i = 0; i < count; i++)
            {
                var keyValuePairElement = state.Elements(XmlSerializer.KeyValuePairElementName).ElementAt(i);
                DeserializeDictionaryKeyValuePair(mapping, dictionary, keyValuePairElement);
            }
        }
Пример #12
0
        protected override void SerializeDictionary <T>(DictionaryMapping dictionaryMapping, T data, JToken state)
        {
            var objectValue = AttemptGetValue(dictionaryMapping, data, state);

            if (objectValue == null)
            {
                return;
            }
            var dictionaryValue = (objectValue as IDictionary);

            var jsonArray = new JArray();

            state.Replace(jsonArray);
            foreach (var key in dictionaryValue.Keys)
            {
                var jsonObject = new JObject();
                jsonArray.Add(jsonObject);
                SerializeDictionaryKeyValuePair(dictionaryMapping, dictionaryValue, key, jsonObject);
            }
        }
Пример #13
0
        protected virtual object DeserializeDictionaryValue(DictionaryMapping mapping, TDeserializeState state)
        {
            if (IsDataNull(state))
            {
                return(null);
            }

            if (mapping.IsValueDynamicType)
            {
                return(DeserializeDynamicTypeData(state));
            }

            if (mapping.ValueMappings.Count > 0)
            {
                var valueInstance = Activator.CreateInstance(mapping.ValueType);
                Deserialize(mapping.ValueMappings, valueInstance, state);
                return(valueInstance);
            }

            return(DeserializePrimitive(mapping.ValueType, state));
        }
Пример #14
0
        protected virtual object DeserializeDictionaryKey(DictionaryMapping mapping, TDeserializeState state)
        {
            if (IsDataNull(state))
            {
                return(null);
            }

            if (mapping.IsKeyDynamicType)
            {
                return(DeserializeDynamicTypeData(state));
            }

            if (mapping.KeyMappings.Count > 0)
            {
                var keyInstance = TypeCreator.Instantiate(mapping.KeyType);
                Deserialize(mapping.KeyMappings, keyInstance, state);
                return(keyInstance);
            }

            return(DeserializePrimitive(mapping.KeyType, state));
        }
Пример #15
0
        private string SerializeDictionary <T>(DictionaryMapping dictionaryMapping, T data)
        {
            var output          = new StringBuilder();
            var dictionaryValue = dictionaryMapping.GetValue(data);

            if (dictionaryValue == null)
            {
                return(string.Format("{0} : {1} \n", dictionaryMapping.ScopedName, null));
            }

            output.AppendFormat("{0} : {1} \n", dictionaryMapping.ScopedName, dictionaryValue.Count);

            foreach (var currentKey in dictionaryValue.Keys)
            {
                if (dictionaryMapping.KeyMappings.Count > 0)
                {
                    var result = Serialize(dictionaryMapping.KeyMappings, currentKey);
                    output.Append(result);
                }
                else
                {
                    output.AppendFormat("{0} : {1} \n", dictionaryMapping.ScopedName + ".key", currentKey);
                }

                var currentValue = dictionaryValue[currentKey];
                if (dictionaryMapping.ValueMappings.Count > 0)
                {
                    var result = Serialize(dictionaryMapping.ValueMappings, currentValue);
                    output.Append(result);
                }
                else
                {
                    output.AppendFormat("{0} : {1} \n", dictionaryMapping.ScopedName + ".value", currentValue);
                }
            }

            return(output.ToString());
        }
Пример #16
0
        protected virtual void SerializeDictionaryValue(DictionaryMapping dictionaryMapping, object value, TSerializeState state)
        {
            if (value == null)
            {
                HandleNullData(state);
                return;
            }

            if (dictionaryMapping.IsKeyDynamicType)
            {
                SerializeDynamicTypeData(value, state);
                return;
            }

            if (dictionaryMapping.ValueMappings.Count > 0)
            {
                Serialize(dictionaryMapping.ValueMappings, value, state);
            }
            else
            {
                SerializePrimitive(value, dictionaryMapping.ValueType, state);
            }
        }
Пример #17
0
 protected virtual void SerializeDictionaryKeyValuePair(DictionaryMapping dictionaryMapping, IDictionary dictionary, object key, TSerializeState state)
 {
     SerializeDictionaryKey(dictionaryMapping, key, state);
     SerializeDictionaryValue(dictionaryMapping, dictionary[key], state);
 }