Ejemplo n.º 1
0
        // Deserialize T from IBonded<T> containing an instance or payload of derived class.
        void BondedDeserialize <T, D>()
            where T : class
            where D : class, T, new()
        {
            var from = Random.Init <D>();

            IBonded <T> bondedInstance   = new Bonded <D>(from);
            IBonded <T> bondedPayloadCB  = Util.MakeBondedCB(from);
            IBonded <T> bondedPayloadCB2 = Util.MakeBondedCB2(from);
            IBonded <T> bondedPayloadSP  = Util.MakeBondedSP(from);
            IBonded <BondClass <IBonded <T> > > nestedBonded =
                new Bonded <BondClass <IBonded <T> > >(new BondClass <IBonded <T> > {
                field = bondedInstance
            });

            for (var i = 2; --i != 0;)
            {
                var to1   = bondedInstance.Deserialize();
                var to2   = bondedPayloadCB.Deserialize();
                var toCb2 = bondedPayloadCB2.Deserialize();
                var to3   = bondedPayloadSP.Deserialize();

                Assert.IsTrue(to1.IsEqual <T>(from));
                Assert.IsTrue(to2.IsEqual <T>(from));
                Assert.IsTrue(toCb2.IsEqual <T>(from));
                Assert.IsTrue(to3.IsEqual <T>(from));
                Assert.IsTrue(nestedBonded.Deserialize().field.Deserialize().IsEqual(from));
            }
        }
Ejemplo n.º 2
0
        // Deserialize derived class from IBonded<T> containing an instance or payload of derived class.
        void BondedDowncastDeserialize <T, D>()
            where T : class
            where D : class, T, new()
        {
            var from = Random.Init <D>();

            IBonded <T> bondedInstance  = new Bonded <D>(from);
            IBonded <T> bondedPayloadCB = Util.MakeBondedCB(from);
            IBonded <T> bondedPayloadSP = Util.MakeBondedSP(from);

            for (var i = 2; --i != 0;)
            {
                var to1 = bondedInstance.Deserialize <D>();
                var to2 = bondedPayloadCB.Deserialize <D>();
                var to3 = bondedPayloadSP.Deserialize <D>();

                Assert.IsTrue(to1.IsEqual <D>(from));
                Assert.IsTrue(to2.IsEqual <D>(from));
                Assert.IsTrue(to3.IsEqual <D>(from));
            }
        }