first commit
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
|
||||
namespace AddressablesTools.Catalog
|
||||
{
|
||||
internal static class SerializedObjectDecoder
|
||||
{
|
||||
internal enum ObjectType
|
||||
{
|
||||
AsciiString,
|
||||
UnicodeString,
|
||||
UInt16,
|
||||
UInt32,
|
||||
Int32,
|
||||
Hash128,
|
||||
Type,
|
||||
JsonObject
|
||||
}
|
||||
|
||||
internal static object Decode(BinaryReader br)
|
||||
{
|
||||
ObjectType type = (ObjectType)br.ReadByte();
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case ObjectType.AsciiString:
|
||||
{
|
||||
string str = ReadString4(br);
|
||||
return str;
|
||||
}
|
||||
|
||||
case ObjectType.UnicodeString:
|
||||
{
|
||||
string str = ReadString4Unicode(br);
|
||||
return str;
|
||||
}
|
||||
|
||||
case ObjectType.UInt16:
|
||||
{
|
||||
return br.ReadUInt16();
|
||||
}
|
||||
|
||||
case ObjectType.UInt32:
|
||||
{
|
||||
return br.ReadUInt32();
|
||||
}
|
||||
|
||||
case ObjectType.Int32:
|
||||
{
|
||||
return br.ReadInt32();
|
||||
}
|
||||
|
||||
case ObjectType.Hash128:
|
||||
{
|
||||
// read as string for now
|
||||
string str = ReadString1(br);
|
||||
return str;
|
||||
}
|
||||
|
||||
case ObjectType.Type:
|
||||
{
|
||||
if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||
{
|
||||
throw new NotSupportedException($"{nameof(ObjectType)}.{nameof(ObjectType.Type)} is only supported on windows because it uses {nameof(Type.GetTypeFromCLSID)}");
|
||||
}
|
||||
string str = ReadString1(br);
|
||||
return Type.GetTypeFromCLSID(new Guid(str));
|
||||
}
|
||||
|
||||
case ObjectType.JsonObject:
|
||||
{
|
||||
string assemblyName = ReadString1(br);
|
||||
string className = ReadString1(br);
|
||||
string jsonText = ReadString4Unicode(br);
|
||||
ClassJsonObject jsonObj = new ClassJsonObject(assemblyName, className, jsonText);
|
||||
return jsonObj;
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static string ReadString1(BinaryReader br)
|
||||
{
|
||||
int length = br.ReadByte();
|
||||
string str = Encoding.ASCII.GetString(br.ReadBytes(length));
|
||||
return str;
|
||||
}
|
||||
|
||||
private static string ReadString4(BinaryReader br)
|
||||
{
|
||||
int length = br.ReadInt32();
|
||||
string str = Encoding.ASCII.GetString(br.ReadBytes(length));
|
||||
return str;
|
||||
}
|
||||
|
||||
private static string ReadString4Unicode(BinaryReader br)
|
||||
{
|
||||
int length = br.ReadInt32();
|
||||
string str = Encoding.Unicode.GetString(br.ReadBytes(length));
|
||||
return str;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user