【问题标题】:problem with returning some lists in Json : ASP.NET Core在 Json 中返回一些列表的问题:ASP.NET Core
【发布时间】:2019-02-14 00:26:23
【问题描述】:

我正在创建一个从 MySql 数据库返回一些结果的 API。我有一个包含 2 行和一些字段的表。查询的主要因素是一个名为Title 的字段。应用程序应根据“标题”字段返回结果。这两条记录中的titlesSweet StreetSweet Street 2

为了将结果返回为 JSON,我创建了一个类:

using System.Collections.Generic;
namespace IMES_Backend.Controllers
{
    internal class Movie
    {
        public class BaseResponse
        {
            public List<Item> search { get; set; } = new List<Item>();
            public bool response { get; set; }

        }

        public class Item
        {
            public string title { get; set; }
            public string year { get; set; }
            public string released { get; set; }
            public string runTime { get; set; }
            public string genre { get; set; }
            public string director { get; set; }
            public string writer { get; set; }
            public string actors { get; set; }
            public string language { get; set; }
            public string country { get; set; }
            public string awards { get; set; }
            public string poster { get; set; }
            public string imdbScore { get; set; }
            public string production { get; set; }
            public string dl480p { get; set; }
            public string dl720p { get; set; }
            public string dl1080p { get; set; }
            public string subtitleLink { get; set; }
            public string dubLink { get; set; }
            public string description { get; set; }
            public string state { get; set; }

        }
    }
}

然后我选择前面提到的 2 行并以 JSON 格式返回结果:

    [Route("IMES/api/GET/search/t={movieTitle}")]
    [HttpGet]
    public IActionResult MovieSearch(string movieTitle)
    {
        string searchKeyword = movieTitle.Replace("%20", " ");

        //Try to connect to the database
        try
        {
            DB.dbConnection.Open();
            MySqlCommand cmd = new MySqlCommand("select * from Movies where Title LIKE '%" + searchKeyword + "%'",DB.dbConnection);
            DB.dataReader = cmd.ExecuteReader();

            while (DB.dataReader.Read())
            {
                baseResponse.response = true;

                //Create a list for storing the movie's data
                baseResponse.search.Add(new Movie.Item
                {
                    title = DB.dataReader.GetString(1),
                    year = DB.dataReader.GetString(2),
                    released = DB.dataReader.GetString(3),
                    runTime = DB.dataReader.GetString(4),
                    genre = DB.dataReader.GetString(5),
                    director = DB.dataReader.GetString(6),
                    writer = DB.dataReader.GetString(7),
                    actors = DB.dataReader.GetString(8),
                    language = DB.dataReader.GetString(9),
                    country = DB.dataReader.GetString(10),
                    awards = DB.dataReader.GetString(11),
                    poster = DB.dataReader.GetString(12),
                    imdbScore = DB.dataReader.GetString(13),
                    production = DB.dataReader.GetString(14),
                    dl480p = DB.dataReader.GetString(15),
                    dl720p = DB.dataReader.GetString(16),
                    dl1080p = DB.dataReader.GetString(17),
                    subtitleLink = DB.dataReader.GetString(18),
                    dubLink = DB.dataReader.GetString(19),
                    description = DB.dataReader.GetString(20),
                    state = DB.dataReader.GetString(21),
                });

                string response = JsonConvert.SerializeObject(baseResponse);
                return Ok(response);

            }
        }
        catch(MySqlException ex) //MySql connection problem
        {
            return Ok(ex.Message);
        }
        finally
        {
            DB.dbConnection.Close();
            DB.dataReader.Close();
        }
        baseResponse.response = false;
        string error = JsonConvert.SerializeObject(baseResponse.response);
        return Ok(error);
    }

当我浏览.../IMES/api/GET/search/t=sweet时,我只得到第一行数据,第二行没有包含关键字sweet的第二个列表。

我想在 JSON 的单独列表中获取两行的数据。 任何人都可以帮忙吗?

注意:我在 SQL Studio 中尝试过查询,我收到了两条记录。所以我确定那 2 行!

【问题讨论】:

    标签: c# asp.net json web-services asp.net-web-api


    【解决方案1】:

    你正在从 while 循环中返回

    while(){
        retun Ok(response);
    }
    

    ,所以在添加第一项后返回。 将其移出 while 循环

    while(){
     //do stuff
    }
    string response = JsonConvert.SerializeObject(baseResponse);
    return Ok(response);
    

    【讨论】:

    • 感谢您的回答!这样可行。你能指定我如何命名这些列表吗?例如,我想将列表一命名为“Item1”,第二个命名为“Item2”
    • 我会创建一个字典 Dictionary,其中 string 是 guid 或其他东西 ('Item1', 'Item2')如果答案有效,您能否选择它作为答案(按勾号)?:)
    • 另外,我建议使用参数化 SQL - 任何人都可以使用您当前的设置删除您的数据库!
    猜你喜欢
    • 1970-01-01
    • 2021-01-04
    • 2020-06-24
    • 2018-07-09
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多