private DictionaryJsonSerializer(Type type, bool encrypt, JsonMappings mappings, bool shouldUseAttributeDefinedInInterface) { _encrypt = encrypt; _mappings = mappings; _shouldUseAttributeDefinedInInterface = shouldUseAttributeDefinedInInterface; Type keyType; if (type.IsAssignableToGenericIDictionary()) { var genericArguments = type.GetGenericArguments(); keyType = genericArguments[0]; if (typeof(IDictionary <string, object>).IsAssignableFrom(type)) { _valueSerializer = JsonSerializerFactory.GetSerializer(genericArguments[1], _encrypt, _mappings, shouldUseAttributeDefinedInInterface); _write = GetIDictionaryOfStringToObjectWriteAction(); } else if (type.IsAssignableToGenericIDictionaryOfStringToAnything()) { _valueSerializer = JsonSerializerFactory.GetSerializer(genericArguments[1], _encrypt, _mappings, shouldUseAttributeDefinedInInterface); _write = GetIDictionaryOfStringToAnythingWriteAction(); } else { _keySerializer = JsonSerializerFactory.GetSerializer(genericArguments[0], _encrypt, _mappings, shouldUseAttributeDefinedInInterface); _valueSerializer = JsonSerializerFactory.GetSerializer(genericArguments[1], _encrypt, _mappings, shouldUseAttributeDefinedInInterface); _write = GetIDictionaryOfAnythingToAnythingWriteAction(); } } else { keyType = typeof(object); _keySerializer = JsonSerializerFactory.GetSerializer(typeof(object), _encrypt, _mappings, shouldUseAttributeDefinedInInterface); _valueSerializer = _keySerializer; _write = GetIDictionaryOfAnythingToAnythingWriteAction(); } if (type.IsInterface) { if (type.IsGenericIDictionary()) { type = typeof(Dictionary <,>).MakeGenericType( type.GetGenericArguments()[0], type.GetGenericArguments()[1]); } else if (type == typeof(IDictionary)) { type = typeof(Dictionary <object, object>); } else { throw new NotSupportedException(type.FullName); } } _createDictionary = GetCreateDictionaryFunc(type); _deserializeKey = GetDeserializeKeyFunc(keyType); _addToDictionary = GetAddToDictionaryAction(type); }
private ListJsonSerializer(Type type, bool encrypt, JsonMappings mappings) { _encrypt = encrypt; if (type.IsAssignableToGenericIEnumerable()) { var itemType = type.GetGenericIEnumerableType().GetGenericArguments()[0]; _itemSerializer = JsonSerializerFactory.GetSerializer(itemType, _encrypt, mappings); } else { _itemSerializer = JsonSerializerFactory.GetSerializer(typeof(object), _encrypt, mappings); } if (type.IsInterface) { if (type.IsGenericIEnumerable()) { var itemType = type.GetGenericArguments()[0]; type = typeof(List <>).MakeGenericType(itemType); } else { type = typeof(List <object>); } } _createList = GetCreateListFunc(type); _addItem = GetAddItemAction(type); }
private DictionaryJsonSerializer(Type type, bool encrypt, JsonMappings mappings, bool shouldUseAttributeDefinedInInterface) { _encrypt = encrypt; _mappings = mappings; _shouldUseAttributeDefinedInInterface = shouldUseAttributeDefinedInInterface; Type keyType; if (type.IsAssignableToGenericIDictionary()) { var genericArguments = type.GetGenericArguments(); keyType = genericArguments[0]; if (typeof(IDictionary<string, object>).IsAssignableFrom(type)) { _valueSerializer = JsonSerializerFactory.GetSerializer(genericArguments[1], _encrypt, _mappings, shouldUseAttributeDefinedInInterface); _write = GetIDictionaryOfStringToObjectWriteAction(); } else if (type.IsAssignableToGenericIDictionaryOfStringToAnything()) { _valueSerializer = JsonSerializerFactory.GetSerializer(genericArguments[1], _encrypt, _mappings, shouldUseAttributeDefinedInInterface); _write = GetIDictionaryOfStringToAnythingWriteAction(); } else { _keySerializer = JsonSerializerFactory.GetSerializer(genericArguments[0], _encrypt, _mappings, shouldUseAttributeDefinedInInterface); _valueSerializer = JsonSerializerFactory.GetSerializer(genericArguments[1], _encrypt, _mappings, shouldUseAttributeDefinedInInterface); _write = GetIDictionaryOfAnythingToAnythingWriteAction(); } } else { keyType = typeof(object); _keySerializer = JsonSerializerFactory.GetSerializer(typeof(object), _encrypt, _mappings, shouldUseAttributeDefinedInInterface); _valueSerializer = _keySerializer; _write = GetIDictionaryOfAnythingToAnythingWriteAction(); } if (type.IsInterface) { if (type.IsGenericIDictionary()) { type = typeof(Dictionary<,>).MakeGenericType( type.GetGenericArguments()[0], type.GetGenericArguments()[1]); } else if (type == typeof(IDictionary)) { type = typeof(Dictionary<object, object>); } else { throw new NotSupportedException(type.FullName); } } _createDictionary = GetCreateDictionaryFunc(type); _deserializeKey = GetDeserializeKeyFunc(keyType); _addToDictionary = GetAddToDictionaryAction(type); }
private ListJsonSerializer(Type type, bool encrypt, JsonMappings mappings) { _encrypt = encrypt; if (type.IsAssignableToGenericIEnumerable()) { var itemType = type.GetGenericIEnumerableType().GetGenericArguments()[0]; _itemSerializer = JsonSerializerFactory.GetSerializer(itemType, _encrypt, mappings); } else { _itemSerializer = JsonSerializerFactory.GetSerializer(typeof(object), _encrypt, mappings); } if (type.IsInterface) { if (type.IsGenericIEnumerable()) { var itemType = type.GetGenericArguments()[0]; type = typeof(List<>).MakeGenericType(itemType); } else { type = typeof(List<object>); } } _createList = GetCreateListFunc(type); _addItem = GetAddItemAction(type); }
private ListJsonSerializer(Type type, bool encrypt, JsonMappings mappings, bool shouldUseAttributeDefinedInInterface) { _encrypt = encrypt; if (type.IsAssignableToGenericIEnumerable()) { var itemType = type.GetGenericIEnumerableType().GetGenericArguments()[0]; _itemSerializer = JsonSerializerFactory.GetSerializer(itemType, _encrypt, mappings, shouldUseAttributeDefinedInInterface); } else { _itemSerializer = JsonSerializerFactory.GetSerializer(typeof(object), _encrypt, mappings, shouldUseAttributeDefinedInInterface); } if (type.IsInterface) { if (type.IsGenericIEnumerable()) { var itemType = type.GetGenericArguments()[0]; type = typeof(List<>).MakeGenericType(itemType); } else { type = typeof(List<object>); } } var listType = type; if (type.IsArray) { if (type.GetArrayRank() > 1) { throw new NotSupportedException("Only arrays with a rank of one are supported: " + type + "."); } var itemType = type.GetElementType(); listType = typeof(List<>).MakeGenericType(itemType); } _createList = GetCreateListFunc(listType); _addItem = GetAddItemAction(listType); _transformList = GetTransformListFunc(type, listType); }
private ListJsonSerializer(Type type, bool encrypt, JsonMappings mappings, bool shouldUseAttributeDefinedInInterface) { _encrypt = encrypt; if (type.IsAssignableToGenericIEnumerable()) { var itemType = type.GetGenericIEnumerableType().GetGenericArguments()[0]; _itemSerializer = JsonSerializerFactory.GetSerializer(itemType, _encrypt, mappings, shouldUseAttributeDefinedInInterface); } else { _itemSerializer = JsonSerializerFactory.GetSerializer(typeof(object), _encrypt, mappings, shouldUseAttributeDefinedInInterface); } if (type.IsInterface) { if (type.IsGenericIEnumerable()) { var itemType = type.GetGenericArguments()[0]; type = typeof(List <>).MakeGenericType(itemType); } else { type = typeof(List <object>); } } var listType = type; if (type.IsArray) { if (type.GetArrayRank() > 1) { throw new NotSupportedException("Only arrays with a rank of one are supported: " + type + "."); } var itemType = type.GetElementType(); listType = typeof(List <>).MakeGenericType(itemType); } _createList = GetCreateListFunc(listType); _addItem = GetAddItemAction(listType); _transformList = GetTransformListFunc(type, listType); }