使用restful Web服务以JSON格式返回数据

时间:2015-03-11 11:48:27

标签: c# json rest

我正在创建一个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;
        }
    }
}

2 个答案:

答案 0 :(得分:3)

因为你把它写成;

read.ToString()

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

如果您想阅读列值,可以read[0]read[1]read[2]等方式访问它们。或者您可以使用SqlDataReader' s { {3}}。

顺便说一句,你应该总是使用GetXXX methods。这种字符串连接对parameterized queries攻击是开放的。使用SQL Injection也可以处理您的连接,命令和阅读器。

答案 1 :(得分:0)

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

您需要将数据作为对象读取并对其进行序列化。请参阅Convert rows from a data reader into typed results如何操作。

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

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