Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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#列表<;对象>;进入Firebase实时数据库?_C#_.net_Firebase_Firebase Realtime Database_Json.net - Fatal编程技术网

如何发布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"
        }
    }