上一节内容结束后确实可以写入文件了,但还有两个问题:
1.一个是players.txt中,每次重启服务器,当注册新账号创建角色时,players.txt之前内容都会清空。
2.players.txt之前已经注册3次的账号,新注册的角色信息不会写入players.txt,猜测与userPlayerIds.txt中的残留内容有关。但userPlayerIds.txt中的内容感觉不全!
先解决第一个问题:上边 userPlayerIds.txt的内容是可以成功读出来并且转化的,players.txt中的内容转化失败,所以此时就是空的!
就是json转换结构体上出现了问题,账号那可以的,换到这就出问题了!
对比来看AccountModel和PlayerModel基本上大同小异
Newtonsoft.Json.JsonSerializationException:“Unable to find a constructor to use for type GameServer.model.PlayerModel. A class should either have a default constructor, one constructor with arguments or a constructor marked with the JsonConstructor attribute. Path '431b0501-457f-46ba-91dd-353c8a3c8c0c.id', line 3, position 9.”
Newtonsoft。Json。JsonSerializationException:“找不到用于类型GameServer.model.PlayerModel的构造函数。类应该有一个默认构造函数、一个带参数的构造函数或一个用JsonConstructor属性标记的构造函数。路径'431b0501-457f-46ba-91dd-353c8a3c8c8c.id',第3行,位置9。”
就是PlayerModel类没有构造函数!
namespace GameServer.model
{
internal class PlayerModel
{
public string id { get; set; }
public string name { get; set; }
public int job { get; set; }
public int level { get; set; }
public int exp { get; set; }
public int atk { get; set; }
public int def { get; set; }
public int hp { get; set; }
public int maxHp { get; set; }
public Vector3 point { get; set; }
public Vector4 rotation { get; set; }
public int map { get; set; }
public PlayerModel(PlayerModel model)
{
this.job = model.job;
this.level = model.level;
this.exp = model.exp;
this.atk = model.atk;
this.def = model.def;
this.hp = model.hp;
this.maxHp = model.maxHp;
}
public PlayerModel(
int job,
int level,
int exp,
int atk,
int def,
int map,
int hp,
int maxHp)
{
this.job = job;
this.level = level;
this.exp = exp;
this.atk = atk;
this.def = def;
this.map = map;
this.hp = hp;
this.maxHp = maxHp;
}
}
}
很明显是有构造函数的,还有2个,没想到再加一个
public PlayerModel()
{ }
的确是解决了!: