【问题标题】:return data in JSON format using restful web service使用 RESTful Web 服务以 JSON 格式返回数据
【发布时间】:2015-03-11 11:48:27
【问题描述】:

我正在创建一个 Web 服务,它将从数据库中获取数据并返回到 json。但我没有获取数据。当我运行代码时,结果我得到 "\"System. Data.SqlClient.SqlDataReader\"" 所以现在尝试的是下面。你能帮我改正代码吗。

Iservice.cs

namespace SearchService
{

    [ServiceContract]
    public interface IService1
    {

        [OperationContract]

        string Search(string keyword);


    }

}

service1.cs

namespace SearchService
{

    public class Service1 : IService1
    {
        public string Search(string keyword)
        {

            var json = "";
            var data = "";

            SqlConnection sql_Search;


            sql_Search = new SqlConnection("Data Source=.;Initial Catalog=student_info;Integrated Security=True");
            sql_Search.Open();

            SqlCommand SelectCommand = new SqlCommand("SELECT Student_ID,First_Name,Last_Name FROM record Where (First_Name Like '%" + keyword + "%')", sql_Search);


            SelectCommand.ExecuteNonQuery();

            SqlDataReader read = SelectCommand.ExecuteReader();

            while (read.Read())
            {

                data = read.ToString();
            }

            JavaScriptSerializer JavaSerialzer = new JavaScriptSerializer();
            json = JavaSerialzer.Serialize(data);
            return json;
        }
    }
}

【问题讨论】:

  • 那么答案是什么

标签: c# json rest


【解决方案1】:

既然你写成;

read.ToString()

它显然会返回该类的全名。

如果您想读取列值,可以使用read[0]read[1]read[2] 等方式访问它们。或者您也可以使用SqlDataReaderGetXXX methods

顺便说一句,您应该始终使用parameterized queries。这种字符串连接对SQL Injection 攻击开放。使用using statement 来处理你的连接、命令和阅读器。

【讨论】:

    【解决方案2】:

    read.ToString()会返回read的类型,即“System.Data.SqlClient.SqlDataReader”。

    您需要将数据作为对象读取并序列化。请参阅Convert rows from a data reader into typed results 如何做到这一点。

    甚至更简单的是使用 ORM 生成类并从数据库中读取静态类型的对象,而不是从字符串构建查询(使用参数化查询),然后从该读取器构建对象。

    但是还有很多,你的代码根本上是错误的。您不应该从 WCF 服务返回包装在(可能是)SOAP 对象中的 JSON 字符串,使用正确的绑定并只返回对象本身,或者使用 WebAPI。

    【讨论】:

    • 相当大的电话说有人应该使用 ORM。
    • 我没有得到确切的答案,所以你能写下那个代码吗?
    • @CRice 哦,天哪,反 ORM 警察来了。 OP 希望将数据库行作为 JSON 字符串返回,对于一个明显的初学者来说,最简单的方法(并规避代码当前存在的 SQL 注入漏洞)是使用 ORM。不过,我已经将“应该”改为“可以”。 @downvoter:感谢您忽略了这一点。
    • @CodeCaster 我必须同意 CRice。在我推荐使用 ORM 之前,我会使用 DataContractJsonSerializer 来构建 JSON
    • @Matthew 很好,但我真的看不出有什么令人信服的论据。
    猜你喜欢
    • 2018-04-22
    • 2012-01-09
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多