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(), }; }
/// <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() }; }
/// <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() }; }
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 })); } }