下面是定义的消息
消息处理函数
然后报了个MongoDB.Bson.BsonSerializationException: Maximum serialization depth exceeded (does the object being serialized have a circular reference?) MongoDB的序列化错误
消息处理函数也没有执行,去掉注解的话不会报错但是会找不到消息处理函数
2067762001 说的很清楚啊,does the object being serialized have a circular reference? 看看哪个类循环引用了。
IxbxAxx 好像没有循环引用,因为报错前我增加的代码只有上面这些,我感觉是我注解标错了,大佬知道哪里有开源的7.2版本的项目有自定义Actor消息的吗,我去参考一下。
终于找出问题了,原来是不能在继承了AMActorRpcHandler<E, Request, Response>的类中用Log打印E。虽然我还不知道为什么。
2067762001 ????那不就是Scene有循环引用嘛😂
Log.Debug($"{scene} 处理消息"); 打印日志会调用 ToString(); 最终调用了 MongoHelper.ToJson(o) 触发了序列化操作
Log.Debug($"{scene} 处理消息");
ToString()
MongoHelper.ToJson(o)
public abstract class Object { public override string ToString() { return JsonHelper.ToJson(this); } }
改成 Log.Debug($"{scene.SceneType} 处理消息"); 就可以了
Log.Debug($"{scene.SceneType} 处理消息");