예제 #1
0
        public override void Read(Stream stream)
        {
            _elementType = (SerializeTypeEnum)stream.ReadByte();
            var elementType = SerializeTypes.GetType(_elementType);

            _rank       = stream.ReadInt32();
            _dimensions = new int[_rank];
            for (int i = 0; i < _rank; i++)
            {
                _dimensions[i] = stream.ReadInt32();
            }
            int currDim = 0;
            int count   = 1;
            var ind     = new int[_rank];

            for (int i = 0; i < _rank; i++)
            {
                count *= _dimensions[i];
            }
            _values = new object[count];
            for (int i = 0; i < count; i++)
            {
                ind        = MySerializer.GetNewArrayIndexes(_rank, _dimensions, ind, ref currDim);
                _values[i] = stream.ReadPrimitiveOrStringType(elementType);
            }
        }
예제 #2
0
        public override void Read(Stream stream)
        {
            var assembly = stream.ReadString();
            var name     = stream.ReadString();

            _arrayType = Assembly.Load(assembly).GetType(name);

            _rank       = stream.ReadInt32();
            _dimensions = new int[_rank];
            int count = 1;

            for (int i = 0; i < _rank; i++)
            {
                _dimensions[i] = stream.ReadInt32();
                count         *= _dimensions[i];
            }
            int currDim = 0;
            var ind     = new int[_rank];

            _elementsInfo = new List <ISerializeInstanceInfo>();
            for (int i = 0; i < count; i++)
            {
                ind = MySerializer.GetNewArrayIndexes(_rank, _dimensions, ind, ref currDim);
                var info = this.Context.GetUninitializedTypeInfo((SerializeTypeEnum)stream.ReadByte());
                info.Read(stream);
                _elementsInfo.Add(info);
            }
        }
예제 #3
0
        internal ArrayOfPrimitivesInfo(Array obj, ISerializationContext ctx)
            : base(obj, ctx)
        {
            _elementType = SerializeTypes.GetTypeEnum(obj.GetType().GetElementType());
            _rank        = obj.Rank;
            _dimensions  = new int[_rank];
            for (int i = 0; i < _rank; i++)
            {
                _dimensions[i] = obj.GetLength(i);
            }
            int[] ind     = new int[_rank];
            int   currDim = 0;
            int   count   = 1;

            for (int i = 0; i < _rank; i++)
            {
                count *= _dimensions[i];
            }
            this._values = new object[count];
            for (int i = 0; i < count; i++)
            {
                ind        = MySerializer.GetNewArrayIndexes(_rank, _dimensions, ind, ref currDim);
                _values[i] = obj.GetValue(ind);
            }
        }
예제 #4
0
        public static void Main(String [] args)
        {
            Point  p1   = new Point(2, 3);
            String str1 = MySerializer.Serialize(p1);

            Console.WriteLine(str1);
            Point newPt = MySerializer.Deserialize <Point>(str1);

            Console.WriteLine(newPt);
        }
예제 #5
0
        public static void Main(String [] args)
        {
            Point  p1   = new Point(2, 3);
            String str1 = MySerializer.Serialize(p1);

            Console.WriteLine(str1);
            Point newPt = MySerializer.Deserialize <Point>(str1);

            Console.WriteLine(newPt);

            Student s1   = new Student("Test Student", 3.5, false);
            String  str2 = MySerializer.Serialize(s1);

            Console.WriteLine(str2);
            Student newSt = MySerializer.Deserialize <Student>(str2);

            Console.WriteLine(newSt);
        }
예제 #6
0
        static void Main(string[] args)
        {
            var serializer = new MySerializer();
            var stream     = new MemoryStream();

            var lst = new List <object>();

            //var apple = new Apple<int>(Colour.Green, 4);
            //lst.Add(new int[,,] { { { 1, 2, 3 }, { 4, 5, 6 } }, { { 7, 8, 9 }, { 10, 11, 12 } } });
            //lst.Add(apple);
            //lst.Add(ConsoleColor.Yellow);
            //lst.Add("abcd");
            //lst.Add(4321);

            var x = new int[, , ] {
                { { 1, 2, 3 }, { 4, 5, 6 } }, { { 7, 8, 9 }, { 10, 11, 12 } }
            };

            //Apple[] apples = new Apple[2] { new Apple(Colour.Yellow, 9), new Apple(Colour.Red, 10) };

            var l    = new LinkedList <Apple>();
            var app1 = new Apple(Colour.Yellow, 9);
            var app2 = new Apple(Colour.Green, 7);
            var app3 = new Apple(Colour.Yellow, 5);
            var app4 = new Apple(Colour.Red, 8);
            var app5 = new Apple(Colour.Yellow, 2);
            var n1   = l.AddFirst(app1);
            var n2   = l.AddAfter(n1, app3);
            var n3   = l.AddBefore(n2, app2);
            var n4   = l.AddAfter(n3, app4);
            var n5   = l.AddAfter(n4, app5);

            Colour c = Colour.Yellow;
            var    d = 2424.655;


            serializer.Serialize(l, stream);
            stream.Position = 0;

            var r = serializer.Deserialize(stream);
        }
예제 #7
0
        public override object Get(List <ISerializeInstanceInfo> instanceInfos)
        {
            var arr = Array.CreateInstance(SerializeTypes.GetType(_elementType), _dimensions);

            this.Instance = arr;
            int count = 1;
            var ind   = new int[_rank];

            for (int i = 0; i < _rank; i++)
            {
                count *= _dimensions[i];
            }
            int currDim = 0;

            for (int i = 0; i < count; i++)
            {
                ind = MySerializer.GetNewArrayIndexes(_rank, _dimensions, ind, ref currDim);
                arr.SetValue(_values[i], ind);
            }
            return(arr);
        }
예제 #8
0
        public override object Get(List <ISerializeInstanceInfo> instanceInfos)
        {
            var objType = Assembly.Load(_arrayType.Assembly.FullName).GetType(_arrayType.FullName);
            var arr     = Array.CreateInstance(objType, _dimensions);

            this.Instance = arr;
            int currDim = 0;
            int count   = 1;
            var ind     = new int[_rank];

            for (int i = 0; i < _rank; i++)
            {
                count *= _dimensions[i];
            }
            for (int i = 0; i < count; i++)
            {
                ind = MySerializer.GetNewArrayIndexes(_rank, _dimensions, ind, ref currDim);
                arr.SetValue(_elementsInfo[i].Get(instanceInfos), ind);
            }
            return(arr);
        }
예제 #9
0
        internal ArrayOfByRefInfo(Array obj, ISerializationContext ctx)
            : base(obj, ctx)
        {
            _rank       = obj.Rank;
            _arrayType  = obj.GetType().GetElementType();
            _dimensions = new int[_rank];
            for (int i = 0; i < _rank; i++)
            {
                _dimensions[i] = obj.GetLength(i);
            }
            int[] ind     = new int[_rank];
            int   currDim = 0;
            int   count   = obj.Length;

            _elementsInfo = new List <ISerializeInstanceInfo>();
            for (int i = 0; i < count; i++)
            {
                ind = MySerializer.GetNewArrayIndexes(_rank, _dimensions, ind, ref currDim);
                _elementsInfo.Add(ctx.GetInstanceInfo(obj.GetValue(ind)));
            }
        }