Example #1
0
 public void CanSerializeNullableDateTime()
 {
     var builder = new ILSerializerBuilder();
     var instance = builder.CreateSerializerType<NDateTime>();
     var testPoco = new NDateTime() { A = DateTime.Now };
     var serialized = instance.Serialize(testPoco);
     var poco = instance.Deserialize(serialized);
     Assert.IsTrue(testPoco.A.Equals(poco.A));
 }
Example #2
0
 public void CanSerializeLongEnumArrays()
 {
     var builder = new ILSerializerBuilder();
     var instanceInt = builder.CreateSerializerType<Array<ALongEnum>>();
     var testPocoInt = new Array<ALongEnum>() { A = new ALongEnum[] { ALongEnum.l1, ALongEnum.l3 } };
     var serializedInt = instanceInt.Serialize(testPocoInt);
     var pocoInt = instanceInt.Deserialize(serializedInt);
     Assert.IsTrue(testPocoInt.A.Length.Equals(pocoInt.A.Length) && testPocoInt.A[0] == pocoInt.A[0] && testPocoInt.A[1] == pocoInt.A[1]);
 }
Example #3
0
 public void CanSerializeDateTimeArrays()
 {
     var builder = new ILSerializerBuilder();
     var instance = builder.CreateSerializerType<Array<DateTime>>();
     var testPoco = new Array<DateTime>() { A = new DateTime[] { DateTime.Now, DateTime.Now.AddDays(1) } };
     var serialized = instance.Serialize(testPoco);
     var poco = instance.Deserialize(serialized);
     Assert.IsTrue(testPoco.A.Length.Equals(poco.A.Length));
     Assert.IsTrue(testPoco.A[0].Equals(poco.A[0]));
     Assert.IsTrue(testPoco.A[1].Equals(poco.A[1]));
 }
Example #4
0
        public static object Deserialize(Type targetType, BinaryReader br)
        {
            var isNotNull = br.ReadBoolean();
            if (!isNotNull) return null;

            var isTargetType = br.ReadBoolean();
            string tname = null;
            Type t = targetType;

            if (!isTargetType)
            {
                tname = br.ReadString();
                t = TypeHelper.GetType(tname);
            }

            if (t == null)
                throw (new System.Runtime.Serialization.SerializationException("Type not found: " + tname));

            ISerializer serializer = null;
            lock (_serializers)
            {
                try
                {
                    serializer = _serializers[t];
                }
                catch
                {
                    try
                    {
                        serializer = App.Resolve<ISerializationContext>().GetSerializer(t, StandardFormats.BINARY);
                    }
                    catch
                    {
                        try
                        {
                            serializer = new ILSerializerBuilder().CreateSerializerType(t);
                        }
                        catch { }
                    }
                    try
                    {
                        _serializers.Add(t, serializer);
                    }
                    catch { }
                }
            }
            if (serializer == null) throw (new System.Runtime.Serialization.SerializationException("Serializer not found for type \"" + tname + "\" supporting the " + StandardFormats.BINARY + " format."));

            return serializer.Deserialize(br.ReadBytes(br.ReadInt32()), t);
        }
Example #5
0
 public void CanSerializeComplexMembers()
 {
     var builder = new ILSerializerBuilder();
     var instance = builder.CreateSerializerType<ComplexPOCO>();
     var testPoco = new ComplexPOCO()
     {
         SimplePOCO = new SimplePOCO() { A = true },
         ListOfInt = new List<int>() { 1, 3, 2 },
         IEnumerableOfSimplePOCO = (new SimplePOCO[] { new SimplePOCO() { B = 5 } }).AsEnumerable(),
         CollectionOfSimplePOCO = new ObservableCollection<SimplePOCO>() { new SimplePOCO() { L = 3.2d } },
     };
     var serialized = instance.Serialize(testPoco);
     var poco = instance.Deserialize(serialized);
     Assert.IsTrue(testPoco.SimplePOCO.A.Equals(poco.SimplePOCO.A));
 }
Example #6
0
        public void CanSerializeValueTypeArrays()
        {
            var builder = new ILSerializerBuilder();
            var instanceInt = builder.CreateSerializerType<Array<int>>();
            var testPocoInt = new Array<int>() { A = new int[] { 3, 2 } };
            var serializedInt = instanceInt.Serialize(testPocoInt);
            var pocoInt = instanceInt.Deserialize(serializedInt);
            Assert.IsTrue(testPocoInt.A.Length.Equals(pocoInt.A.Length) && testPocoInt.A[0] == pocoInt.A[0] && testPocoInt.A[1] == pocoInt.A[1]);

            var instanceDec = builder.CreateSerializerType<Array<decimal>>();
            var testPocoDec = new Array<decimal>() { A = new decimal[] { 3M, 2M, 4M } };
            var serializedDec = instanceDec.Serialize(testPocoDec);
            var pocoDec = instanceDec.Deserialize(serializedDec);
            Assert.IsTrue(testPocoDec.A.Length.Equals(pocoDec.A.Length) && testPocoDec.A[0] == pocoDec.A[0] && testPocoDec.A[1] == pocoDec.A[1]);
        }
Example #7
0
 public void CanSerializeStringArrays()
 {
     var builder = new ILSerializerBuilder();
     var instance = builder.CreateSerializerType<Array<string>>();
     var testPoco = new Array<string>() { A = new string[] { "Foo", "Bar" } };
     var serialized = instance.Serialize(testPoco);
     var pocoInt = instance.Deserialize(serialized);
     Assert.IsTrue(testPoco.A.Length.Equals(pocoInt.A.Length));
     Assert.IsTrue(testPoco.A[0].Equals(pocoInt.A[0]));
     Assert.IsTrue(testPoco.A[1].Equals(pocoInt.A[1]));
 }
Example #8
0
        public void CanSerializeSimpleMembers()
        {
            var builder = new ILSerializerBuilder();
            var instance = builder.CreateSerializerType<SimplePOCO>();

            Assert.IsTrue(instance.SupportsType(typeof(SimplePOCO)));
            Assert.IsTrue(instance.SupportsType(instance.GetType()));
            Assert.IsTrue(instance.SupportsFormat(StandardFormats.BINARY));
            Assert.IsFalse(instance.SupportsFormat(StandardFormats.CSV));

            var testPoco = new SimplePOCO()
            {
                A = true,
                B = 1,
                C = 1,
                D = (char)1,
                E = 1,
                F = 1,
                G = 1,
                H = 1,
                I = 1,
                J = 1,
                K = 1,
                L = 1,
                M = 1,
                N = new byte[] { 1, 2, 3 },
                O = "Foo".ToCharArray(),
                P = DateTime.Now,
                Q = "foo",
                R = AnEnum.Fish,
                nA = true
            };

            var serialized = instance.Serialize(testPoco);
            var poco = instance.Deserialize(serialized);

            Assert.IsTrue(testPoco.A.Equals(poco.A));
            Assert.IsTrue(testPoco.B.Equals(poco.B));
            Assert.IsTrue(testPoco.C.Equals(poco.C));
            Assert.IsTrue(testPoco.D.Equals(poco.D));
            Assert.IsTrue(testPoco.E.Equals(poco.E));
            Assert.IsTrue(testPoco.F.Equals(poco.F));
            Assert.IsTrue(testPoco.G.Equals(poco.G));
            Assert.IsTrue(testPoco.H.Equals(poco.H));
            Assert.IsTrue(testPoco.I.Equals(poco.I));
            Assert.IsTrue(testPoco.J.Equals(poco.J));
            Assert.IsTrue(testPoco.K.Equals(poco.K));
            Assert.IsTrue(testPoco.L.Equals(poco.L));
            Assert.IsTrue(testPoco.M.Equals(poco.M));
            Assert.IsTrue(testPoco.N.Length.Equals(poco.N.Length) && poco.N[0] == 1 && poco.N[1] == 2 && poco.N[2] == 3);
            Assert.IsTrue(testPoco.O.Length.Equals(poco.O.Length) && poco.O[0] == 'F' && poco.O[1] == 'o' && poco.O[2] == 'o');
            Assert.IsTrue(testPoco.P.Equals(poco.P));
            Assert.IsTrue(testPoco.Q.Equals(poco.Q));
            Assert.IsTrue(testPoco.R.Equals(poco.R));

            testPoco = new SimplePOCO()
            {
                Q = null,
                N = null,
                O = null
            };

            serialized = instance.Serialize(testPoco);
            poco = instance.Deserialize(serialized);

            Assert.IsTrue(poco.Q == null);
            Assert.IsTrue(poco.N == null);
            Assert.IsTrue(poco.O == null);
        }
Example #9
0
 public void CanSerializeRoutablePayload()
 {
     var builder = new ILSerializerBuilder();
     var instance = builder.CreateSerializerType<RoutablePayload>();
     var testPoco = new RoutablePayload()
     {
         Payload = new NominateExecutionRequest()
         {
             Nominator = "Some text here",
             Request = NoArgs.Empty,
             ScalarResults = true
         },
         PayloadType = "SomeTypeName",
         ReturnType = "SomeTypeName"
     };
     var serialized = instance.Serialize(testPoco);
     var poco = instance.Deserialize(serialized);
 }
Example #10
0
 public void CanSerializeNullableValueTypeArrays()
 {
     var builder = new ILSerializerBuilder();
     var instance = builder.CreateSerializerType<Array<int?>>();
     var testPoco = new Array<int?>() { A = new int?[] { 1, null, 2 } };
     var serialized = instance.Serialize(testPoco);
     var poco = instance.Deserialize(serialized);
     Assert.IsTrue(testPoco.A.Length.Equals(poco.A.Length));
     Assert.IsTrue(testPoco.A[0].Equals(poco.A[0]));
     Assert.IsTrue(testPoco.A[1].Equals(poco.A[1]));
     Assert.IsTrue(testPoco.A[2].Equals(poco.A[2]));
 }
Example #11
0
        public void CanSerializeNullableMembers()
        {
            var builder = new ILSerializerBuilder();
            var instance = builder.CreateSerializerType<SimplePOCO>();

            Assert.IsTrue(instance.SupportsType(typeof(SimplePOCO)));
            Assert.IsTrue(instance.SupportsType(instance.GetType()));
            Assert.IsTrue(instance.SupportsFormat(StandardFormats.BINARY));
            Assert.IsFalse(instance.SupportsFormat(StandardFormats.CSV));

            var testPoco = new SimplePOCO()
            {
                nA = true,
                nB = 1,
                nC = 1,
                nD = (char)1,
                nE = 1,
                nF = 1,
                nG = 1,
                nH = 1,
                nI = 1,
                nJ = 1,
                nK = 1,
                nL = 1,
                nM = 1,
                nP = DateTime.Now,
                nR = AnEnum.Dog
            };

            var serialized = instance.Serialize(testPoco);
            var poco = instance.Deserialize(serialized);

            Assert.IsTrue(testPoco.nA.Equals(poco.nA));
            Assert.IsTrue(testPoco.nB.Equals(poco.nB));
            Assert.IsTrue(testPoco.nC.Equals(poco.nC));
            Assert.IsTrue(testPoco.nD.Equals(poco.nD));
            Assert.IsTrue(testPoco.nE.Equals(poco.nE));
            Assert.IsTrue(testPoco.nF.Equals(poco.nF));
            Assert.IsTrue(testPoco.nG.Equals(poco.nG));
            Assert.IsTrue(testPoco.nH.Equals(poco.nH));
            Assert.IsTrue(testPoco.nI.Equals(poco.nI));
            Assert.IsTrue(testPoco.nJ.Equals(poco.nJ));
            Assert.IsTrue(testPoco.nK.Equals(poco.nK));
            Assert.IsTrue(testPoco.nL.Equals(poco.nL));
            Assert.IsTrue(testPoco.nM.Equals(poco.nM));
            Assert.IsTrue(testPoco.nP.Equals(poco.nP));
            Assert.IsTrue(testPoco.nR.Equals(poco.nR));
        }
Example #12
0
 public void CanSerializeNullableEnumArrays()
 {
     var builder = new ILSerializerBuilder();
     var instanceInt = builder.CreateSerializerType<Array<AnEnum?>>();
     var testPocoInt = new Array<AnEnum?>() { A = new AnEnum?[] { AnEnum.Dog, AnEnum.Fish } };
     var serializedInt = instanceInt.Serialize(testPocoInt);
     var pocoInt = instanceInt.Deserialize(serializedInt);
     Assert.IsTrue(testPocoInt.A.Length.Equals(pocoInt.A.Length) && testPocoInt.A[0] == pocoInt.A[0] && testPocoInt.A[1] == pocoInt.A[1]);
 }
Example #13
0
        public static void Serialize(Type targetType, object source, BinaryWriter bw)
        {
            bw.Write(source != null);
            if (source != null)
            {
                var type = targetType;
                if (targetType == typeof(object) && source.GetType() != typeof(object))
                {
                    type = source.GetType();
                }

                string tname = type.AssemblyQualifiedName;
                if (typeof(ISerializer).IsAssignableFrom(targetType))
                {
                    Type baseType = type.BaseType;
                    Type serializerGen = typeof(ISerializer<>);
                    Type serializerSpec = serializerGen.MakeGenericType(baseType);
                    if (serializerSpec.IsAssignableFrom(type))
                    {
                        tname = baseType.AssemblyQualifiedName;
                    }
                }

                ISerializer serializer = null;
                lock (_serializers)
                {
                    try
                    {
                        serializer = _serializers[type];
                    }
                    catch
                    {
                        try
                        {
                            serializer = App.Resolve<ISerializationContext>().GetSerializer(type, StandardFormats.BINARY);
                        }
                        catch
                        {
                            try
                            {
                                serializer = new ILSerializerBuilder().CreateSerializerType(type);
                            }
                            catch { }
                        }
                        try
                        {
                            _serializers.Add(type, serializer);
                        }
                        catch { }
                    }
                }

                if (serializer == null)
                    throw (new System.Runtime.Serialization.SerializationException("Serializer not found for type \"" + tname + "\" supporting the " + StandardFormats.BINARY + " format."));

                byte[] data = serializer.Serialize(source);
                if (targetType == source.GetType())
                {
                    bw.Write(true);
                }
                else
                {
                    bw.Write(false);
                    bw.Write(tname);
                }
                bw.Write(data.Length);
                bw.Write(data);

            }
        }
Example #14
0
        private static void PerfTest()
        {
            var builder = new ILSerializerBuilder();
            var instance = builder.CreateSerializerType<SimplePOCO>();

            var testPoco = new SimplePOCO()
            {
                //A = true,
                //B = 1,
                //C = 1,
                //D = (char)1,
                //E = 1,
                //F = 1,
                //G = 1,
                //H = 1,
                //I = 1,
                //J = 1,
                //K = 1,
                //L = 1,
                //M = 1,
                N = new byte[] { 1, 2, 3 },
                //O = "Foo".ToCharArray()
            };

            var serialized = instance.Serialize(testPoco);
            var poco = instance.Deserialize(serialized);

            var stopwatch = new Stopwatch();
            stopwatch.Start();

            for (int i = 0; i < 1000000; i++)
            {
                instance.Serialize(testPoco);
            }

            stopwatch.Stop();

            var bandwidth = (double)(serialized.Length * 1000000);
            var serializationRate = (bandwidth / (stopwatch.ElapsedMilliseconds / 1000d)) / (1024 * 1000);
            Logger.LogInfo("Suffūz Bandwidth [Kb]: {0}", bandwidth / (1024d));
            Logger.LogInfo("Suffūz Throughput [Mb/s]: {0}", serializationRate);
            Logger.LogInfo("Suffūz Rate [Hz]: {0}", 1000000d / (stopwatch.ElapsedMilliseconds / 1000d));
            stopwatch = new Stopwatch();
            stopwatch.Start();

            for (int i = 0; i < 1000000; i++)
            {
                instance.Deserialize(serialized);
            }

            stopwatch.Stop();
            serializationRate = (bandwidth / (stopwatch.ElapsedMilliseconds / 1000d)) / (1024 * 1000);
            Logger.LogInfo("Suffūz Throughput [Mb/s]: {0}", serializationRate);
            Logger.LogInfo("Suffūz Rate [Hz]: {0}", 1000000d / (stopwatch.ElapsedMilliseconds / 1000d));

            var json = Newtonsoft.Json.JsonConvert.SerializeObject(testPoco);
            stopwatch = new Stopwatch();
            stopwatch.Start();

            for (int i = 0; i < 1000000; i++)
            {
                Newtonsoft.Json.JsonConvert.SerializeObject(testPoco);
            }

            stopwatch.Stop();

            var jbandwidth = (double)(json.Length * 1000000);
            var jserializationRate = (jbandwidth / (stopwatch.ElapsedMilliseconds / 1000d)) / (1024 * 1000);
            Logger.LogInfo("Json Bandwidth [Kb]: {0}", jbandwidth / (1024d));
            Logger.LogInfo("Json Throughput [Mb/s]: {0}", jserializationRate);
            Logger.LogInfo("Json Rate [Hz]: {0}", 1000000d / (stopwatch.ElapsedMilliseconds / 1000d));
            stopwatch = new Stopwatch();
            stopwatch.Start();

            for (int i = 0; i < 1000000; i++)
            {
                Newtonsoft.Json.JsonConvert.DeserializeObject<SimplePOCO>(json);
            }

            stopwatch.Stop();
            jserializationRate = (jbandwidth / (stopwatch.ElapsedMilliseconds / 1000d)) / (1024 * 1000);
            Logger.LogInfo("Json Throughput [Mb/s]: {0}", jserializationRate);
            Logger.LogInfo("Json Rate [Hz]: {0}", 1000000d / (stopwatch.ElapsedMilliseconds / 1000d));
        }