【发布时间】:2021-01-13 06:44:47
【问题描述】:
我正在尝试使用实时数据库运行事务以更改对象,代码如下:
void tryBeHost()
{
string path = "weeks/" + week + "/games/" + gameId + "/gameInfo";
_dbRef.Child(path).RunTransaction(mutableData =>
{
GameInfo gameInfo = mutableData.Value as GameInfo;
if (gameInfo == null)
{
gameInfo = new GameInfo();
}
else if (gameInfo.host != null && gameInfo.host != myId)
{
return TransactionResult.Success(mutableData);
}
gameInfo.host = myId;
mutableData.Value = gameInfo;
return TransactionResult.Success(mutableData);
});
}
所以我收到了这个奇怪的错误:
事务委托中的异常,正在中止事务 Firebase.Database.DatabaseException:无法解析对象 Serializables.GameInfo ---> System.ArgumentException:用于转换为 Variant 的类型无效的 Serializables.GameInfo 在 Z:\tmp\tmp.EaS8iXpRBh\firebase\app\client\unity\proxy\Variant.cs:117 中的 Firebase.Variant.FromObject (System.Object o) [0x001df] 在 Z:\tmp\tmp.sZ8vrpcx53\firebase\database\client\unity\proxy\Utilities.cs:25 中的 Firebase.Database.Internal.Utilities.MakeVariant(System.Object 值)[0x00000] --- 内部异常堆栈跟踪结束 --- 在 Z:\tmp\tmp.sZ8vrpcx53\firebase\database\client\unity\proxy\Utilities.cs:27 中的 Firebase.Database.Internal.Utilities.MakeVariant(System.Object 值)[0x0000d] 在 Z:\tmp\tmp.sZ8vrpcx53\firebase\database\client\unity\proxy\MutableData.cs:136 中的 Firebase.Database.MutableData.set_Value(System.Object 值)[0x00000] 在 InternetShit.b__10_0 (Firebase.Database.MutableData mutableData) [0x00045] 在 /Users/sandukhan/Unity/projects/Ronda/Assets/Scripts/InternetShit.cs:73 在 Firebase.Database.Internal.InternalTransactionHandler.DoTransaction (System.Int32 callbackId, System.IntPtr mutableData) [0x00022] 中 Z:\tmp\tmp.sZ8vrpcx53\firebase\database\client\unity\proxy\InternalTransactionHandler.cs:49 UnityEngine.Debug:LogWarning(Object) Firebase.Platform.FirebaseLogger:LogMessage(PlatformLogLevel, String) (在 Z:/tmp/tmp.BbQyA8B710/firebase/app/client/unity/src/Unity/FirebaseLogger.cs:92) Firebase.LogUtil:LogMessage(LogLevel, String) (在 Z:/tmp/tmp.EaS8iXpRBh/firebase/app/client/unity/proxy/LogUtil.cs:68) Firebase.Database.Internal.InternalTransactionHandler:DoTransaction(Int32, IntPtr) (在 Z:/tmp/tmp.sZ8vrpcx53/firebase/database/client/unity/proxy/InternalTransactionHandler.cs:51) Firebase.AppUtilPINVOKE:PollCallbacks() Firebase.AppUtil:PollCallbacks()(在 Z:/tmp/tmp.EaS8iXpRBh/firebase/app/client/unity/proxy/AppUtil.cs:32) Firebase.Platform.FirebaseAppUtils:PollCallbacks()(在 Z:/tmp/tmp.EaS8iXpRBh/firebase/app/client/unity/proxy/FirebaseAppUtils.cs:33) Firebase.Platform.FirebaseHandler:Update()(在 Z:/tmp/tmp.BbQyA8B710/firebase/app/client/unity/src/Unity/FirebaseHandler.cs:205) Firebase.Platform.FirebaseMonoBehaviour:Update()(在 Z:/tmp/tmp.BbQyA8B710/firebase/app/client/unity/src/Unity/FirebaseMonoBehaviour.cs:45)
我的 GameInfo 类如下:
using System;
using Serializables;
namespace Serializables
{
[Serializable]
public class GameInfo
{
public string gameId;
public string host;
public string[] playersIds;
public string[] playersPics;
public string[] playersNames;
}
}
如果有人有解决这个问题的想法,我将不胜感激
【问题讨论】:
-
调试中 mutableData.Value 的值是多少?
-
@DespeiL 是
null -
所以首先你应该弄清楚为什么你有 null。我无法将 null 解析为某个对象 =0
-
但如果它是
null,我正在创建新的 GameInfo 对象,并且我认为 null 是 firebase 的可解析值(当您要求 firebase 在字段中写入 null 时,它的意思是:删除它) -
你不能这样做:
mutableData.Value as GameInfo如果mutableData.Value为空。在将mutableData.Value解析到 GameInfo 之前,请检查 mutableData.Value 是否不为空。如果不解析,则创建 GameInfo 的新对象
标签: c# firebase unity3d firebase-realtime-database serialization