public unsafe void SerializeAndDeserialize_MultidimensionalArray()
        {
            var src = new ClassWithMultidimensionalArray
            {
                MultidimensionalArrayInt32 = new[, ]
                {
                    { 1, 2 },
                    { 3, 4 }
                }
            };

            var parameters = new BinarySerializationParameters
            {
                UserDefinedAdapters = new List <IBinaryAdapter>
                {
                    new Array2Adapter <int>()
                }
            };

            using (var stream = new UnsafeAppendBuffer(16, 4, Allocator.Temp))
            {
                BinarySerialization.ToBinary(&stream, src, parameters);
                var reader = stream.AsReader();
                var dst    = BinarySerialization.FromBinary <ClassWithMultidimensionalArray>(&reader, parameters);

                Assert.That(dst.MultidimensionalArrayInt32, Is.EqualTo(new[, ]
                {
                    { 1, 2 },
                    { 3, 4 }
                }));
            }
        }
 /// <summary>
 /// Initializes a new instance of <see cref="ManagedObjectBinaryWriter"/> which can be used to write managed objects to the given stream.
 /// </summary>
 /// <param name="stream">The stream to write to.</param>
 public ManagedObjectBinaryWriter(UnsafeAppendBuffer *stream)
 {
     m_Stream = stream;
     m_Params = new BinarySerializationParameters
     {
         UserDefinedAdapters = new List <IBinaryAdapter> {
             this
         },
         Context = new BinarySerializationContext(),
     };
 }
Пример #3
0
 /// <summary>
 /// Initializes a new instance of <see cref="ManagedObjectBinaryReader"/> which can be used to read managed objects from the given stream.
 /// </summary>
 /// <param name="stream">The stream to read from.</param>
 /// <param name="unityObjectTable">The table containing all <see cref="UnityEngine.Object"/> references. This is produce by the <see cref="ManagedObjectBinaryWriter"/>.</param>
 public ManagedObjectBinaryReader(UnsafeAppendBuffer.Reader *stream, UnityEngine.Object[] unityObjectTable)
 {
     m_Stream = stream;
     m_Params = new BinarySerializationParameters
     {
         UserDefinedAdapters = new List <IBinaryAdapter> {
             new UnityEngineObjectBinaryAdapter(unityObjectTable)
         },
         Context = new BinarySerializationContext()
     };
 }
Пример #4
0
 /// <summary>
 /// Initializes a new instance of <see cref="ManagedObjectBinaryWriter"/> which can be used to write managed objects to the given stream.
 /// </summary>
 /// <param name="stream">The stream to write to.</param>
 public ManagedObjectBinaryWriter(UnsafeAppendBuffer *stream)
 {
     m_Stream = stream;
     m_UnityEngineObjectAdapter = new UnityEngineObjectBinaryAdapter(null);
     m_Params = new BinarySerializationParameters
     {
         UserDefinedAdapters = new List <IBinaryAdapter> {
             m_UnityEngineObjectAdapter
         },
         Context = new BinarySerializationContext()
     };
 }
Пример #5
0
        protected override T SerializeAndDeserialize <T>(T value, CommonSerializationParameters parameters = default)
        {
            var stream = new UnsafeAppendBuffer(16, 8, Allocator.Temp);

            var binarySerializationParameters = new BinarySerializationParameters
            {
                DisableSerializedReferences = parameters.DisableSerializedReferences
            };

            try
            {
                BinarySerialization.ToBinary(&stream, value, binarySerializationParameters);
                var reader = stream.AsReader();
                return(BinarySerialization.FromBinary <T>(&reader, binarySerializationParameters));
            }
            finally
            {
                stream.Dispose();
            }
        }
        public void SerializeAndDeserialize_WithContravariantUserDefinedAdapter_AdapterIsInvokedCorrectly()
        {
            var status = new List <TestStatus>();

            var binarySerializationParameters = new BinarySerializationParameters
            {
                UserDefinedAdapters = new List <IBinaryAdapter>
                {
                    new DummyAdapter(),
                    new ShapeAdapter {
                        Status = status
                    },
                    new AnimalAdapter {
                        Status = status
                    },
                }
            };

            var src = new ClassWithShapes
            {
                Shape  = new Square(),
                Square = new Square(),
                Circle = new Circle(),
                Animal = new Cat(),
                Dog    = new Dog(),
                Cat    = null
            };

            using (var stream = new UnsafeAppendBuffer(16, 4, Allocator.Temp))
            {
                BinarySerialization.ToBinary(&stream, src, binarySerializationParameters);

                Assert.That(status.SequenceEqual(new[]
                {
                    TestStatus.Shape, TestStatus.Shape, TestStatus.Shape, TestStatus.Animal, TestStatus.Dog, TestStatus.Cat
                }));
            }
        }