From e424ebc7e9fc4e04453734f4b6d4a052ffc703d4 Mon Sep 17 00:00:00 2001 From: REDCODE Date: Sat, 13 Jun 2026 20:43:52 +0200 Subject: [PATCH] Added RemappedTypeBinder --- 2DGAMELIB/_2DGAMELIB/RemappedTypeBinder.cs | 38 ++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 2DGAMELIB/_2DGAMELIB/RemappedTypeBinder.cs diff --git a/2DGAMELIB/_2DGAMELIB/RemappedTypeBinder.cs b/2DGAMELIB/_2DGAMELIB/RemappedTypeBinder.cs new file mode 100644 index 0000000..8737bdd --- /dev/null +++ b/2DGAMELIB/_2DGAMELIB/RemappedTypeBinder.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Runtime.Serialization; + +namespace _2DGAMELIB +{ + public sealed class RemappedTypeBinder : SerializationBinder + { + private readonly Dictionary _typeOnlyMap = new(); + private readonly Dictionary _fullMap = new(); + + public RemappedTypeBinder Add(string oldTypeName, Type newType) + { + _typeOnlyMap[oldTypeName] = newType; + return this; + } + + public RemappedTypeBinder Add(string oldTypeName, string oldAssemblyName, Type newType) + { + _fullMap[oldTypeName] = (oldAssemblyName, newType); + return this; + } + + public override Type BindToType(string assemblyName, string typeName) + { + if (_fullMap.TryGetValue(typeName, out var entry)) + { + if (assemblyName != null && assemblyName.StartsWith(entry.AssemblyName)) + return entry.Type; + } + + if (_typeOnlyMap.TryGetValue(typeName, out var type)) + return type; + + return null; + } + } +}