将多个列表聚合为单个json字符串

时间:2019-04-09 21:19:55

标签: c# json

我需要通过json将游戏服务器中的数据发送到客户端,并从数据库中获取大量数据并将其发送会造成问题

当前,我正在数据库调用中创建多个列表以获取数据,但现在我被卡住了,因为我有数据,但是在多个列表中,无法弄清楚如何返回数据。

我觉得我应该在这里将其转换为JSON,然后返回json字符串,但这一切确实令人困惑

public static void GetLobbyList() {
        string query = "SELECT * FROM que";

        MySqlCommand cmd = new MySqlCommand(query, MySQL.mySQLSettings.connection);
        MySqlDataReader reader = cmd.ExecuteReader();

        List<int> ids = new List<int>();
        List<string> uids = new List<string>();
        List<int> bets = new List<int>();
        List<string> games = new List<string>();

        while (reader.Read()) {
            ids.Add((int)reader["id"]);
            uids.Add((string)reader["uid"]);
            bets.Add((int)reader["bet"]);
            games.Add((string)reader["game"]);
        }

        reader.Close();

    }

因此,我在这里从数据库中读取信息,并且由于缺乏经验,我将每个数据点添加到列表中(这确实很丑,我知道必须有更好的方法)

所以基本上我Grab the data->Parse to json->Send string to client

如果有可能假设返回的数据来自具有以下内容的表

id | uid |赌注游戏

我想在json中返回一个看起来像

的数组

{  {   “ id”:1   “ uid”:“ erjfh4982y9hf”,   “ bet”:3,   “游戏”:“蛇”  }  {   “ id”:2   “ uid”:“ gsegt34t”,   “投注”:2   “游戏”:“蛇”  } }

我不太了解json及其工作原理,但我确实知道这是将大量数据包从服务器发送到客户端的唯一方法,因为必须先将所有内容转换为字节,然后才能发送框架不支持将列表转换为字节

2 个答案:

答案 0 :(得分:3)

要实现您的目标,您应该创建一个类来保存从数据库中检索到的数据。就我而言,我将其称为GameObject,其定义如下。

public class GameObject
{
    public int Id { get; set; }
    public string Uid { get; set; }
    public int Bet { get; set; }
    public string Game { get; set; }
}

从数据库中检索信息后,您需要运行类似于以下内容的代码。

var items = new List<GameObject>();

while (reader.Read())
{
    items.Add(new GameObject
    {
        Id = (int)reader["id"],
        Uid = (string)reader["uid"],
        Bet = (int)reader["bet"],
        Game = (string)reader["game"]
    });
}

// Return the jsonPacket which will contain all the items in json format.
var jsonPacket = JsonConvert.SerializeObject(items);

为此,您需要引用nuget中的Newtonsoft.Json库。打开软件包管理器控制台,然后键入以下命令:Install-Package Newtonsoft.Json,它将为您设置它。在我们的代码的顶部,您需要具有using Newtonsoft.Json;才能使用库中的类序列化到Json。在接收端,您可以将字符串传递给JsonConvert.DeserializeObject<T>(),然后将返回对象列表。

答案 1 :(得分:0)

您可以使用object和匿名类型的列表。还有一个JSON序列化程序,如果您将System.Web.Script.Serialization.JavaScriptSerializer程序集添加到引用中,则包含System.Web.Extensions

List<object> list = new List<object>();

while (reader.Read()) {
    list.Add(new { id =  (int)reader["id"],
                   uid = (string)reader["uid"],
                   bet = (int)reader["bet"],
                   game = (string)reader["game"], });

}

string json = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(list);