Fix crash when replicating C# object with NetworkReplicated attribute on derived generic class
#1988
This commit is contained in:
@@ -802,7 +802,7 @@ namespace Flax.Build.Plugins
|
||||
// Serialize base type
|
||||
if (type.BaseType != null && type.BaseType.FullName != "System.ValueType" && type.BaseType.FullName != "FlaxEngine.Object" && type.BaseType.CanBeResolved())
|
||||
{
|
||||
GenerateSerializeCallback(module, il, type.BaseType.Resolve(), serialize);
|
||||
GenerateSerializeCallback(module, il, type.BaseType, serialize);
|
||||
}
|
||||
|
||||
var ildContext = new DotnetIlContext(il);
|
||||
@@ -874,12 +874,13 @@ namespace Flax.Build.Plugins
|
||||
return m;
|
||||
}
|
||||
|
||||
private static void GenerateSerializeCallback(ModuleDefinition module, ILProcessor il, TypeDefinition type, bool serialize)
|
||||
private static void GenerateSerializeCallback(ModuleDefinition module, ILProcessor il, TypeReference type, bool serialize)
|
||||
{
|
||||
if (type.IsScriptingObject())
|
||||
{
|
||||
// NetworkReplicator.InvokeSerializer(typeof(<type>), instance, stream, <serialize>)
|
||||
il.Emit(OpCodes.Ldtoken, module.ImportReference(type));
|
||||
module.ImportReference(type);
|
||||
il.Emit(OpCodes.Ldtoken, type);
|
||||
module.GetType("System.Type", out var typeType);
|
||||
var getTypeFromHandle = typeType.Resolve().GetMethod("GetTypeFromHandle");
|
||||
il.Emit(OpCodes.Call, module.ImportReference(getTypeFromHandle));
|
||||
|
||||
Reference in New Issue
Block a user