Ejemplo n.º 1
0
 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());
 }
Ejemplo n.º 2
0
        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();
        }
Ejemplo n.º 3
0
        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();
 }