/// <summary> /// Deserializes from the specified stream and returns a new instance of <typeparamref name="T"/>. /// </summary> /// <param name="stream">The stream to read from.</param> /// <param name="parameters">The parameters to use when reading.</param> /// <typeparam name="T">The type to deserialize.</typeparam> /// <returns>A new instance of <typeparamref name="T"/> constructed from the serialized data.</returns> public static T FromBinary <T>(UnsafeAppendBuffer.Reader *stream, BinarySerializationParameters parameters = default) { var context = parameters.Context ?? (parameters.RequiresThreadSafety ? new BinarySerializationContext() : GetSharedContext()); var visitor = context.GetBinaryPropertyReader(); visitor.SetStream(stream); visitor.SetSerializedType(parameters.SerializedType); visitor.SetDisableRootAdapters(parameters.DisableRootAdapters); visitor.SetGlobalAdapters(GetGlobalAdapters()); visitor.SetUserDefinedAdapters(parameters.UserDefinedAdapters); visitor.SetSerializedReferences(parameters.DisableSerializedReferences ? default : context.GetSerializedReferences()); var container = new PropertyWrapper <T>(default);
/// <summary> /// Serializes the given object to the given stream as binary. /// </summary> /// <param name="stream">The stream to write the object to.</param> /// <param name="value">The object to serialize.</param> /// <param name="parameters">Parameters to use when writing.</param> /// <typeparam name="T">The type to serialize.</typeparam> public static void ToBinary <T>(UnsafeAppendBuffer *stream, T value, BinarySerializationParameters parameters = default) { var container = new PropertyWrapper <T>(value); var context = parameters.Context ?? (parameters.RequiresThreadSafety ? new BinarySerializationContext() : GetSharedContext()); var visitor = context.GetBinaryPropertyWriter(); visitor.SetStream(stream); visitor.SetSerializedType(parameters.SerializedType); visitor.SetDisableRootAdapters(parameters.DisableRootAdapters); visitor.SetGlobalAdapters(GetGlobalAdapters()); visitor.SetUserDefinedAdapters(parameters.UserDefinedAdapters); visitor.SetSerializedReferences(parameters.DisableSerializedReferences ? default : context.GetSerializedReferences()); using (visitor.Lock()) PropertyContainer.Visit(ref container, visitor); }
/// <summary> /// Serializes the given object to the given stream as binary. /// </summary> /// <param name="stream">The stream to write the object to.</param> /// <param name="value">The object to serialize.</param> /// <param name="parameters">Parameters to use when writing.</param> /// <typeparam name="T">The type to serialize.</typeparam> public static void ToBinary <T>(UnsafeAppendBuffer *stream, T value, BinarySerializationParameters parameters = default) { var container = new PropertyWrapper <T>(value); var state = parameters.State ?? (parameters.RequiresThreadSafety ? new BinarySerializationState() : GetSharedState()); var visitor = state.GetBinaryPropertyWriter(); visitor.SetStream(stream); visitor.SetSerializedType(parameters.SerializedType); visitor.SetDisableRootAdapters(parameters.DisableRootAdapters); visitor.SetGlobalAdapters(GetGlobalAdapters()); visitor.SetUserDefinedAdapters(parameters.UserDefinedAdapters); visitor.SetSerializedReferences(parameters.DisableSerializedReferences ? default : state.GetSerializedReferences()); using (visitor.Lock()) PropertyContainer.Accept(visitor, ref container); if (!parameters.DisableSerializedReferences) { state.GetSerializedReferences().Clear(); } }