如何发布C#列表<;对象>;进入Firebase实时数据库?
我正在创建一个简单的纸牌游戏应用程序,可以与通过随机生成的代码加入游戏的朋友在线玩 我选择以下方式构造数据库如何发布C#列表<;对象>;进入Firebase实时数据库?,c#,.net,firebase,firebase-realtime-database,json.net,C#,.net,Firebase,Firebase Realtime Database,Json.net,我正在创建一个简单的纸牌游戏应用程序,可以与通过随机生成的代码加入游戏的朋友在线玩 我选择以下方式构造数据库 { "GameRooms" : { "-MF23P_AMI--leAoWfh5" : { "Code" : "s1a5a2", "NumberOfSpoons" : 1, "Players" : { &qu
{
"GameRooms" : {
"-MF23P_AMI--leAoWfh5" : {
"Code" : "s1a5a2",
"NumberOfSpoons" : 1,
"Players" : {
"-MF23Tz3c00FCkGgKeUy" : {
"Name" : "player1"
}
}
}
}
}
我正在使用FirebaseDatabase.NETNuget包与数据库交互。我可以在Players
节点下向游戏添加1名玩家,但是,在此之后,我无法添加任何其他使用该代码加入的玩家
这是我在GameRooms
节点下创建游戏的代码(firebase
是我的FirebaseClient对象):
这是一个有问题的代码,应该将一个播放器放在Players
节点下。(这只适用于第一次使用。):
我一直在努力解决这个问题有一段时间了,但我什么也没有得到。我将非常感谢任何关于我如何克服这一问题的帮助或建议。如果您需要更多信息,请告诉我。您需要包装类型-您的JSON不完全是列表。如果我使用以下包装而不是列表
,我可以成功地反序列化JSON数据:
public class PlayerCollection
{
公共字典播放器{get;set;}
}
原因是JSON结构:
"Players" : {
"-MF23Tz3c00FCkGgKeUy" : {
"Name" : "player1"
}
}
顶级的Players
这里是根对象-在我的例子中,PlayerCollection
。然而,里面仍然不是一个列表
-有一个自动生成的ID
-因此它更像是一个字典
-其中字符串
是ID,{“Name”:“player1”}
是播放器
对象
因此,回到您收到的错误-我提供了一个可以从JSON对象反序列化的普通.NET类型(例如,不是integer之类的基本类型,也不是数组或列表之类的集合类型)。您需要一个包装器类型-您的JSON不完全是一个列表。如果我使用以下包装而不是列表
,我可以成功地反序列化JSON数据:
public class PlayerCollection
{
公共字典播放器{get;set;}
}
原因是JSON结构:
"Players" : {
"-MF23Tz3c00FCkGgKeUy" : {
"Name" : "player1"
}
}
顶级的Players
这里是根对象-在我的例子中,PlayerCollection
。然而,里面仍然不是一个列表
-有一个自动生成的ID
-因此它更像是一个字典
-其中字符串
是ID,{“Name”:“player1”}
是播放器
对象
那么,回到您收到的错误-我提供了一个可以从JSON对象反序列化的普通.NET类型(例如,不是integer之类的基本类型,也不是数组或列表之类的集合类型)。那么,这个错误真的很有帮助,不是吗?若要修复此错误,请将JSON更改为JSON数组(例如[1,2,3]),或更改反序列化类型,使其成为可以从JSON对象反序列化的正常.NET类型(例如,不是integer之类的基元类型,也不是数组或列表之类的集合类型)。JsonObjectAttribute也可以添加到类型中,以强制它从JSON对象反序列化。@CoolBots我理解错误,我只是不确定如何在代码中进行更改。JSON中的这个字符串是:“-MF23TZ3C00FCKGKEUY”
某种ID吗?它是动态生成的吗?@CoolBots是的,当对象发布到数据库时,它是由firebase动态生成的。@CoolBots它也是检索数据时用于访问该节点下内容的密钥。因此,该错误非常有用,不是吗?若要修复此错误,请将JSON更改为JSON数组(例如[1,2,3]),或更改反序列化类型,使其成为可以从JSON对象反序列化的正常.NET类型(例如,不是integer之类的基元类型,也不是数组或列表之类的集合类型)。JsonObjectAttribute也可以添加到类型中,以强制它从JSON对象反序列化。@CoolBots我理解错误,我只是不确定如何在代码中进行更改。JSON中的这个字符串是:“-MF23TZ3C00FCKGKEUY”
某种ID吗?它是动态生成的吗?@CoolBots是的,当对象发布到数据库时,它由firebase动态生成。@CoolBots它也是检索数据时用于访问该节点下内容的密钥。这很有意义。我要试试这个。非常感谢你的回答!刚刚试过这个,效果很好。非常感谢@哈什达夫太棒了!很高兴我能帮忙!这很有道理。我要试试这个。非常感谢你的回答!刚刚试过这个,效果很好。非常感谢@哈什达夫太棒了!很高兴我能帮忙!
Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type
'System.Collections.Generic.List`1[Spoons.Models.Player]'
because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.
To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change
the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer,
not a collection type like an array or List<T>) that can be deserialized from a JSON object.
JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
Path '-MEesAsT1nVWPSxzbf8a.Players.0', line 1, position 75.
public class Game
{
int numberOfSpoons = 1;
public string Code { get; set; }
public int NumberOfSpoons { get { return numberOfSpoons; } set { numberOfSpoons = value; } }
Deck deck = new Deck();
public Deck GameDeck
{
get { return deck; }
set { deck = value; }
}
public List<Player> Players { get; set; } = new List<Player>();
public Game(string gameCode)
{
this.Code = gameCode;
}
public class Player
{
public string Name { get; set; }
public Player(string name)
{
this.Name = name;
}
}
"Players" : {
"-MF23Tz3c00FCkGgKeUy" : {
"Name" : "player1"
}
}