Ejemplo n.º 1
0
        public DataWriter(DynamicSerializer parent, Type type)
        {
            this.Parent = parent;
            if (type.IsEnum)
            {
                WriteAction = WriteEnum;
                return;
            }

            if (typeof(IEnumerable).IsAssignableFrom(type))
            {
                WriteAction = WriteEnumerable;

                if (type.GenericTypeArguments.Any())
                {
                    ListType = type.GenericTypeArguments.First();
                }
                else
                {
                    ListType = type.GetElementType();
                }

                return;
            }

            Properties  = Parent.GetSerializableProperties(type);
            WriteAction = WritePropertyValues;
        }
Ejemplo n.º 2
0
        public DataReader(DynamicSerializer parent, Type type, Func <object> activator = null)
        {
            this.Parent = parent;
            ModelType   = type;
            if (type.IsEnum)
            {
                ReadFunction = ReadEnum;
                return;
            }

            if (typeof(IEnumerable).IsAssignableFrom(type))
            {
                if (type.GenericTypeArguments.Any())
                {
                    ReadFunction = ReadList;
                    ListType     = type.GenericTypeArguments.First();
                }
                else
                {
                    ReadFunction = ReadArray;
                    ListType     = type.GetElementType();
                }

                return;
            }

            Properties         = Parent.GetSerializableProperties(type);
            ReadFunction       = ReadPropertyValues;
            ActivationFunction = activator;
        }
Ejemplo n.º 3
0
        public DynamicSerializer Clone()
        {
            DynamicSerializer d = new DynamicSerializer();

            foreach (var w in Writers)
            {
                if (d.Writers.ContainsKey(w.Key) == false)
                {
                    d.Writers.Add(w.Key, w.Value);
                }
            }

            foreach (var r in Readers)
            {
                if (d.Readers.ContainsKey(r.Key) == false)
                {
                    d.Readers.Add(r.Key, r.Value);
                }
            }

            return(d);
        }