committed by
GitHub
4 changed files with 3 additions and 82 deletions
@ -1,72 +0,0 @@ |
|||
using System; |
|||
using System.Diagnostics.CodeAnalysis; |
|||
using System.IO; |
|||
using System.Runtime.Serialization.Formatters.Binary; |
|||
using Avalonia.Compatibility; |
|||
using Avalonia.Logging; |
|||
|
|||
namespace Avalonia.Input.Platform; |
|||
|
|||
// TODO12: remove
|
|||
[Obsolete("Remove in v12")] |
|||
internal static class BinaryFormatterHelper |
|||
{ |
|||
// Compatibility with WinForms + WPF...
|
|||
private static ReadOnlySpan<byte> SerializedObjectGuid |
|||
=> [ |
|||
// FD9EA796-3B13-4370-A679-56106BB288FB
|
|||
0x96, 0xa7, 0x9e, 0xfd, |
|||
0x13, 0x3b, |
|||
0x70, 0x43, |
|||
0xa6, 0x79, 0x56, 0x10, 0x6b, 0xb2, 0x88, 0xfb |
|||
]; |
|||
|
|||
[UnconditionalSuppressMessage("Trimming", "IL2026", Justification = "We still use BinaryFormatter for WinForms drag and drop compatibility")] |
|||
[UnconditionalSuppressMessage("Trimming", "IL3050", Justification = "We still use BinaryFormatter for WinForms drag and drop compatibility")] |
|||
public static byte[]? TrySerializeUsingBinaryFormatter(object data, DataFormat dataFormat) |
|||
{ |
|||
if (!OperatingSystemEx.IsWindows()) |
|||
return null; |
|||
|
|||
Logger.TryGet(LogEventLevel.Warning, LogArea.Win32Platform)?.Log( |
|||
null, |
|||
"Using BinaryFormatter to serialize data format {Format}. This won't be supported in Avalonia v12. Prefer passing a byte[] or Stream instead.", |
|||
dataFormat); |
|||
|
|||
var stream = new MemoryStream(); |
|||
var serializedGuid = SerializedObjectGuid; |
|||
|
|||
#if NET6_0_OR_GREATER
|
|||
stream.Write(serializedGuid); |
|||
#else
|
|||
stream.Write(serializedGuid.ToArray(), 0, serializedGuid.Length); |
|||
#endif
|
|||
|
|||
#pragma warning disable SYSLIB0011 // Type or member is obsolete
|
|||
new BinaryFormatter().Serialize(stream, data); |
|||
#pragma warning restore SYSLIB0011 // Type or member is obsolete
|
|||
|
|||
return stream.GetBuffer(); |
|||
} |
|||
|
|||
[UnconditionalSuppressMessage("Trimming", "IL2026", Justification = "We still use BinaryFormatter for WinForms drag and drop compatibility")] |
|||
[UnconditionalSuppressMessage("Trimming", "IL3050", Justification = "We still use BinaryFormatter for WinForms drag and drop compatibility")] |
|||
public static object? TryDeserializeUsingBinaryFormatter(byte[]? bytes) |
|||
{ |
|||
var serializedObjectGuid = SerializedObjectGuid; |
|||
|
|||
// Our Win32 backend used to automatically serialize/deserialize objects using the BinaryFormatter.
|
|||
// Only keep that behavior for compatibility with IDataObject.
|
|||
if (OperatingSystemEx.IsWindows() && bytes is not null && bytes.AsSpan().StartsWith(serializedObjectGuid)) |
|||
{ |
|||
using var stream = new MemoryStream(bytes); |
|||
stream.Position = serializedObjectGuid.Length; |
|||
|
|||
#pragma warning disable SYSLIB0011 // Type or member is obsolete
|
|||
return new BinaryFormatter().Deserialize(stream); |
|||
#pragma warning restore SYSLIB0011 // Type or member is obsolete
|
|||
} |
|||
|
|||
return null; |
|||
} |
|||
} |
|||
Loading…
Reference in new issue