protected virtual void DeserializeDictionaryKeyValuePair(DictionaryMapping mapping, IDictionary dictionary, TDeserializeState state) { var keyInstance = DeserializeDictionaryKey(mapping, state); var valueInstance = DeserializeDictionaryValue(mapping, state); dictionary.Add(keyInstance, valueInstance); }
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); }
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); }
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)); }
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); }
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); }
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); }
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); } }
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); } }
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); } }
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); } }
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); } }
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)); }
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)); }
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()); }
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); } }
protected virtual void SerializeDictionaryKeyValuePair(DictionaryMapping dictionaryMapping, IDictionary dictionary, object key, TSerializeState state) { SerializeDictionaryKey(dictionaryMapping, key, state); SerializeDictionaryValue(dictionaryMapping, dictionary[key], state); }