无法将json对象作为字符串返回

时间:2015-08-02 09:12:46

标签: c# json c#-4.0

我有一个返回String数据类型的C#函数。我想将一个json对象作为字符串返回,但是我收到了这个错误:CS1002 :;预期 这是功能:

    public String LoginUser(string Username, string Password)
   {
               string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
               SqlConnection con = new SqlConnection(constr);
               try
               {
                   SqlCommand cmd = new SqlCommand("Login_User");
                   cmd.CommandType = CommandType.StoredProcedure;
                   cmd.Parameters.AddWithValue("@Username", Username);
                   cmd.Parameters.AddWithValue("@Password", Password);
                   cmd.Connection = con;
                   if (con.State == ConnectionState.Closed)
                   {
                       con.Open();
                   }
                   SqlDataReader rd = cmd.ExecuteReader();
                   if (rd.HasRows)
                   {
                       rd.Read();
                       return "{"message": "Successfully"}"; //me sukses
                   }

                   else
                       return "{"message": "Invalid Username and/or Password"}"; //pas sukses
               }

               catch (Exception ex)
               {
                   throw ex;
               }
               finally
               {
                   if (con.State != ConnectionState.Closed)
                   {
                       con.Close();
                   }
               }
  }

2 个答案:

答案 0 :(得分:0)

据我所知,在两个字符串中都需要escape " character;

return "{\"message\": \"Successfully\"}"; //me sukses

return "{\"message\": \"Invalid Username and/or Password\"}";

或者使用逐字字符串文字加倍;

return @"{""message"": ""Invalid Username and/or Password""}";

return "{""message"": ""Invalid Username and/or Password""}";

使用using statement自动处理您的连接,命令和阅读器,而不是手动调用CloseDispose方法。

不要使用AddWithValue方法。 It may generate unexpected and surprising results sometimes。使用Add方法重载来指定参数类型及其大小。

我强烈怀疑你将密码保存为plaint文本的方式。 不要这样做。阅读Best way to store password in database

答案 1 :(得分:0)

在字符串前使用@可轻松转义双引号。

return @"{"message": "Invalid Username and/or Password"}";

尝试更改:

           catch (Exception ex)
           {
                  throw ex;  // don't do this
           }

致:

           catch (SqlException ex)
           {
               return string.Format("error: {0}", ex.message);
           }