sif2-patch/src/Edelstein.Assets.Management/Manifest/ManifestSerializationBinder.cs
2025-01-07 23:43:28 +08:00

46 lines
1.9 KiB
C#

using Edelstein.Assets.Management.Manifest.Bundle;
using Edelstein.Assets.Management.Manifest.Movie;
using Edelstein.Assets.Management.Manifest.Sound;
using System.Runtime.Serialization;
namespace Edelstein.Assets.Management.Manifest;
public class ManifestSerializationBinder : SerializationBinder
{
public override Type BindToType(string assemblyName, string typeName) =>
typeName switch
{
"ShockBinaryBundleSingleManifest" => typeof(BundleManifest),
"ShockBinaryBundleManifest" => typeof(BundleManifestEntry),
"ShockBinaryMovieSingleManifest" => typeof(MovieManifest),
"ShockBinaryMovieManifest" => typeof(MovieManifestEntry),
"ShockBinarySoundSingleManifest" => typeof(SoundManifest),
"ShockBinarySoundManifest" => typeof(SoundManifestEntry),
_ => throw new NotImplementedException()
};
public override void BindToName(Type serializedType, out string? assemblyName, out string? typeName)
{
if (serializedType.FullName!.StartsWith("System."))
{
assemblyName = "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
typeName = serializedType.FullName;
return;
}
assemblyName = "Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null";
typeName = serializedType.Name switch
{
nameof(BundleManifest) => "ShockBinaryBundleSingleManifest",
nameof(BundleManifestEntry) => "ShockBinaryBundleManifest",
nameof(MovieManifest) => "ShockBinaryMovieSingleManifest",
nameof(MovieManifestEntry) => "ShockBinaryMovieManifest",
nameof(SoundManifest) => "ShockBinarySoundSingleManifest",
nameof(SoundManifestEntry) => "ShockBinarySoundManifest",
_ => throw new NotImplementedException()
};
}
}