因为游戏对象不能被序列化,所以我编写了一个保存游戏对象名称的类,以便它可以通过名称找到它.然而,我在反序列化过程中收到了这个错误,并且我不知道为什么.
JsonSerializationException:在JSON中指定的类型‘GameObtReferencer,SaveSystem,Version=0.0.0.0,区域性=Null,PublicKeyToken=NULL’与‘UnityEngine.GameObject,UnityEngine.CoreModule,Version=0.0.0.0,区域性=Null,PublicKeyToken=NULL’不兼容.Path‘wrappedSaveDatas.$values[4].savedObject.other.$type’,线338,位置55.
这是我的自定义转换器:
public class GameObjectFromReferenceConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{ return objectType == typeof(GameObjectReferencer);
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{ throw new Exception("GameObjectFromReferenceConverter should only be used when loading");
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
GameObjectReferencer goRef = (GameObjectReferencer)reader.Value;
return ((GameObjectReferencer)goRef).GetGameObject();
}
}
这是我的Referencer类:
public class GameObjectReferencer
{
public string targetGameObjectName;
public GameObjectReferencer(string gameObjectName)
{
this.targetGameObjectName = gameObjectName;
}
public GameObject GetGameObject()
{
GameObject go = GameObject.Find(targetGameObjectName);
if (go == null)
throw new System.Exception("Can't find object with the name " + targetGameObjectName);
return go;
}
public override string ToString()
{
return "GameObjectReference of \"" + targetGameObjectName+ "\"";
}
public static GameObjectReferencer GenerateReference(GameObject gameObject)
{
return new GameObjectReferencer(gameObject.name);
}
}