public KeyValuePairSerializer(Serializers s, Type type) { getKey = type.DelegateForGetPropertyValue("Key"); getValue = type.DelegateForGetPropertyValue("Value"); key = s.FromDeclared(type.GetGenericArguments()[0]); value = s.FromDeclared(type.GetGenericArguments()[1]); newObj = type.DelegateForCreateInstance(type.GetGenericArguments()); }
public StructSerializer(Serializers serializer, Type type) { var properties = type.Properties(Flags.InstancePublic) .Where(n => !serializer.IsIgnored(n)).ToArray(); getters = properties.Select(n => n.DelegateForGetPropertyValue()).ToArray(); setters = properties.Select(n => n.DelegateForSetPropertyValue()).ToArray(); this.serializers = properties.Select(n => serializer.FromDeclared(n.PropertyType)).ToArray(); this.newObj = type.DelegateForCreateInstance(); }
public DictionarySerializer(Serializers serializer, Type type) { var elementType = typeof(KeyValuePair <,>).MakeGenericType(type.GetGenericArguments()); this.ser = serializer.FromDeclared(elementType); this.count = type.DelegateForGetPropertyValue("Count"); this.add = type.DelegateForSetIndexer(elementType.GetGenericArguments()); this.newObj = type.DelegateForCreateInstance(); this.key = elementType.DelegateForGetPropertyValue("Key"); this.value = elementType.DelegateForGetPropertyValue("Value"); }
public EnumerableSerializer(Serializers serializer, Type type) { var elementType = type.IsGenericType ? type.GetGenericArguments() [0] : typeof(object); this.ser = serializer.FromDeclared(elementType); this.count = type.DelegateForGetPropertyValue("Count"); var addMethod = type.GetMethods().First(n => n.Name == "Add" && n.GetParameters().Length == 1); this.add = addMethod.DelegateForCallMethod(); this.newObj = type.DelegateForCreateInstance(); this.classSer = new ClassSerializer(serializer, type); }
public ArraySerializer(Serializers serializer, Type type) { this.ser = serializer.FromDeclared(type.GetElementType()); this.newObj = type.DelegateForCreateInstance(typeof(int)); this.setter = type.DelegateForSetElement(); }