我需要通过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及其工作原理,但我确实知道这是将大量数据包从服务器发送到客户端的唯一方法,因为必须先将所有内容转换为字节,然后才能发送框架不支持将列表转换为字节
答案 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);