Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 列表c的MongoDB反序列化错误#_C#_Mongodb_Deserialization - Fatal编程技术网

C# 列表c的MongoDB反序列化错误#

C# 列表c的MongoDB反序列化错误#,c#,mongodb,deserialization,C#,Mongodb,Deserialization,我目前正在使用mongoDB存储玩家数据。我将播放器数据存储为类对象。PlayerInfo类有几个与玩家相关的变量,例如他们的id、总数、金牌等。它还存储另一个类(角色清单)的列表,其中包含玩家拥有的每个角色的信息 当我尝试连接到数据库并检索信息时,出现以下错误: 异常:反序列化myCharsList时出错 PlayerInfo类的属性: 以下是连接到数据库并检索有关播放机信息的代码: client = new MongoClient (connectionString);

我目前正在使用mongoDB存储玩家数据。我将播放器数据存储为类对象。PlayerInfo类有几个与玩家相关的变量,例如他们的id、总数、金牌等。它还存储另一个类(角色清单)的列表,其中包含玩家拥有的每个角色的信息

当我尝试连接到数据库并检索信息时,出现以下错误:

异常:反序列化myCharsList时出错 PlayerInfo类的属性:

以下是连接到数据库并检索有关播放机信息的代码:

        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;