C# 列表c的MongoDB反序列化错误#
我目前正在使用mongoDB存储玩家数据。我将播放器数据存储为类对象。PlayerInfo类有几个与玩家相关的变量,例如他们的id、总数、金牌等。它还存储另一个类(角色清单)的列表,其中包含玩家拥有的每个角色的信息 当我尝试连接到数据库并检索信息时,出现以下错误: 异常:反序列化myCharsList时出错 PlayerInfo类的属性: 以下是连接到数据库并检索有关播放机信息的代码:C# 列表c的MongoDB反序列化错误#,c#,mongodb,deserialization,C#,Mongodb,Deserialization,我目前正在使用mongoDB存储玩家数据。我将播放器数据存储为类对象。PlayerInfo类有几个与玩家相关的变量,例如他们的id、总数、金牌等。它还存储另一个类(角色清单)的列表,其中包含玩家拥有的每个角色的信息 当我尝试连接到数据库并检索信息时,出现以下错误: 异常:反序列化myCharsList时出错 PlayerInfo类的属性: 以下是连接到数据库并检索有关播放机信息的代码: client = new MongoClient (connectionString);
client = new MongoClient (connectionString);
server = client.GetServer ();
database = server.GetDatabase ("myDB");
playerCollection = database.GetCollection<PlayerInfo> ("Players");
try {
pInfo = playerCollection.AsQueryable<PlayerInfo>().Where<PlayerInfo>(player => player._id == "101112").SingleOrDefault();
totalGold = pInfo.totalGold;
myCharsList = pInfo.myCharsList;
Debug.Log ("GOT INFO FROM DATABASE");
} catch (Exception exx) {
Debug.Log ("Exception :" + exx.Message);
try {
pInfo = new PlayerInfo ();
pInfo._id = "101112";
pInfo.myCharsList = new List<myChar> ();
playerCollection.Insert (pInfo);
Debug.Log ("ADDED NEW PLAYER TO DATABASE");
} catch (Exception exxx) {
Debug.Log ("Failed to insert into collection of Database " + database.Name);
Debug.Log ("Error :" + exx.Message);
}
}
从我的数据库图片中可以看出,所有内容都存储在数据库中(我相信这是正确的):
任何帮助都将不胜感激!谢谢我们看不到MonoBehavior中的内容,您在数据库中的myChar中有15个字段。所以,我假设在MonoBehavior中可能有6个字段。基本上,我建议仔细查看字段是否匹配(按数据类型和名称)。如果序列化程序无法确定将mongo文档中的字段放在何处,则可能会出现此错误 我们看不到MonoBehavior中的内容,您在数据库中的myChar中有15个字段。所以,我假设在MonoBehavior中可能有6个字段。基本上,我建议仔细查看字段是否匹配(按数据类型和名称)。如果序列化程序无法确定将mongo文档中的字段放在何处,则可能会出现此错误 我希望你已经解决了你的问题 首先,我将把
[bsonignorextraelements]
添加到myChar类中,只是为了移除您对反序列化不感兴趣的属性
bsonignorextraelements
:指定在反序列化此类时是否应忽略额外的元素
[BsonIgnoreExtraElements]
public class myChar : MonoBehaviour
{
public string namee;
...
}
另一方面,我将仔细查看该类中的每个字段类型
例如:
类中的速度定义为浮点,但在数据库中存储为双精度。
例如,您可以在类中将其设置为Double
或者你可以使用
BSON表示属性表示BSON文档中的值。这是另一个可能有帮助的选项,但我会首先检查每个类型是否正确匹配
[BsonRepresentation(BsonType.Double)]
public float speed;
我希望你已经解决了你的问题 首先,我将把
[bsonignorextraelements]
添加到myChar类中,只是为了移除您对反序列化不感兴趣的属性
bsonignorextraelements
:指定在反序列化此类时是否应忽略额外的元素
[BsonIgnoreExtraElements]
public class myChar : MonoBehaviour
{
public string namee;
...
}
另一方面,我将仔细查看该类中的每个字段类型
例如:
类中的速度定义为浮点,但在数据库中存储为双精度。
例如,您可以在类中将其设置为Double
或者你可以使用
BSON表示属性表示BSON文档中的值。这是另一个可能有帮助的选项,但我会首先检查每个类型是否正确匹配
[BsonRepresentation(BsonType.Double)]
public float speed;