46 lines
1.9 KiB
C#
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()
|
|
};
|
|
}
|
|
}
|