【发布时间】:2020-12-10 16:10:53
【问题描述】:
我有这段代码,用于从数据库中获取消息:
[HttpGet]
public string RecieveMessagesFromDatabase(int ChatID)
{
// Before - Query formatting and execution
while(reader.Read())
{
for (int i = 0; i < UserList.Count; i++)
{
if (ChatID == 1)
{
TempMessageStorage.Add(
new Messages(reader["Message"].ToString(), Convert.ToInt32(reader["SenderID"]),
reader["Date"].ToString(), ReceiverID, groupid));
} // Public Chat
else if (ChatID == 2)
{
if (i == Convert.ToInt32(reader["SenderID"]) || i == Convert.ToInt32(reader["ReveiverID"]))
{
TempMessageStorage.Add(
new Messages(reader["Message"].ToString(), Convert.ToInt32(reader["SenderID"]),
reader["Date"].ToString(), ReceiverID, groupid));
}
} // Private Chat
else if(ChatID == 3)
{
if (i == Convert.ToInt32(reader["SenderID"]) || i == Convert.ToInt32(reader["ReveiverID"]))
{
TempMessageStorage.Add(
new Messages(reader["Message"].ToString(), Convert.ToInt32(reader["SenderID"]),
reader["Date"].ToString(), ReceiverID, groupid));
}
} // Group Chat
}
}
return JsonSerializer.Serialize(TempMessageStorage);
}
catch(Exception ex)
{
Content(ex.Message);
}
finally
{
reader.Close();
_Connection.Connection.Close();
}
return null;
}
在TempMessageStorage 中存在消息,并且不为空。但 JSON 返回空结果。但并不是真的空。它似乎得到了记录的数量,但它们是空的。这就是它的样子 - https://prnt.sc/u3d8gc
消息类包含
【问题讨论】:
-
您是否尝试过在模型类的属性中添加 get 和 set。
-
你还需要连载吗?只需返回
TempMessageStorage并将返回类型更改为List<TempMessgeStorage>就足够了。 -
嗯...带有 JS 的客户端将如何使用没有 JSON 格式的数据?
-
@Raitis 数据将由 ASP.NET 本身根据请求的
Accept-Type标头进行格式化。您是否注意到没有 ASP.NET 教程或示例显式序列化? -
在 C# 中,属性不仅仅是 getter 和 setter 方法,它们是类接口的一部分。字段不是,即使它们是公开的。它们只是实现细节。默认情况下,序列化程序使用属性,而不是字段。您的 DTO 没有属性,因此不会序列化任何内容。虽然您可以将序列化程序配置为使用字段,但正确的解决方案是使用属性