You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何返回JSON数据?已装Newtonsoft,如何将字符串对象转为JSON

嘿,我来帮你搞定这两个WebService的JSON相关需求,结合你给出的代码,给你具体的实现方案:

1. 让WebService正确返回JSON数据

你已经给InsertData方法加了[ScriptMethod(ResponseFormat = ResponseFormat.Json)]属性,这步是对的,但现在返回的是拼接的字符串,没法被识别为结构化的JSON。我们需要返回一个自定义的结果对象,再通过Newtonsoft.Json把它序列化成标准JSON。

2. 用Newtonsoft.Json将数据对象转成JSON

首先,我们先定义两个辅助类,用来封装返回的结果和学生数据(这样返回的JSON结构清晰,前端好解析):

// 封装返回的整体结果
public class InsertResult
{
    public bool Success { get; set; }
    public string Message { get; set; }
    public StudentInfo InsertedStudent { get; set; }
}

// 封装插入的学生信息
public class StudentInfo
{
    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    // 你可以根据需求添加其他字段,比如联系方式、地址等
}

接下来修改你的InsertData方法,优化数据库操作的资源管理(用using自动释放连接,避免泄漏),同时用Newtonsoft.Json完成序列化:

using Newtonsoft.Json;
using System.Data.SqlClient;
using System.Web.Services;
using System.Web.Script.Services;

public class WebService1 : System.Web.Services.WebService 
{
    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string InsertData(string fname, string mname, string lname, string emailid, string password, string contactno, string hobby, string address, string countrycodenum)
    {
        // 初始化返回结果对象
        var result = new InsertResult();
        string connStr = ConfigurationManager.ConnectionStrings["cnn"].ConnectionString;

        // 使用using语句自动管理数据库连接和命令的生命周期
        using (SqlConnection cn = new SqlConnection(connStr))
        {
            try
            {
                cn.Open();
                string insertQuery = @"INSERT INTO tblstudent(fname, mname, lname, emailid, password, contactno, hobby, address, countrycodenum)
                                       VALUES(@fname, @mname, @lname, @emailid, @password, @contactno, @hobby, @address, @countrycodenum)";
                
                using (SqlCommand cmd = new SqlCommand(insertQuery, cn))
                {
                    // 添加参数,避免SQL注入
                    cmd.Parameters.AddWithValue("@fname", fname);
                    cmd.Parameters.AddWithValue("@mname", mname);
                    cmd.Parameters.AddWithValue("@lname", lname);
                    cmd.Parameters.AddWithValue("@emailid", emailid);
                    cmd.Parameters.AddWithValue("@password", password);
                    cmd.Parameters.AddWithValue("@contactno", contactno);
                    cmd.Parameters.AddWithValue("@hobby", hobby);
                    cmd.Parameters.AddWithValue("@address", address);
                    cmd.Parameters.AddWithValue("@countrycodenum", countrycodenum);

                    int rowsAffected = cmd.ExecuteNonQuery();
                    if (rowsAffected > 0)
                    {
                        result.Success = true;
                        result.Message = "数据插入成功";
                        // 把插入的学生信息封装进去
                        result.InsertedStudent = new StudentInfo
                        {
                            FirstName = fname,
                            MiddleName = mname,
                            LastName = lname,
                            Email = emailid
                        };
                    }
                    else
                    {
                        result.Success = false;
                        result.Message = "数据插入失败";
                    }
                }
            }
            catch (Exception ex)
            {
                // 捕获异常,返回错误信息
                result.Success = false;
                result.Message = $"插入过程出错:{ex.Message}";
            }
        }

        // 用Newtonsoft.Json把结果对象序列化成JSON字符串返回
        return JsonConvert.SerializeObject(result);
    }
}

几个关键要点说明:

  • 结构化返回:通过自定义类,返回的JSON会有清晰的结构(比如{"Success":true,"Message":"数据插入成功","InsertedStudent":{"FirstName":"xxx"...}}),前端可以直接解析这些字段,比拼接的字符串好用多了。
  • 资源安全:using语句会在代码块结束后自动关闭并释放数据库连接和命令,比手动调用cn.Close()更可靠,不会因为异常导致连接泄漏。
  • 异常处理:加了try-catch块,能捕获数据库操作中的错误,把错误信息返回给调用方,方便调试和处理异常场景。
  • 避免SQL注入:你原来用参数化查询的做法是对的,要保持这个好习惯,别直接拼接SQL语句。

这样修改后,你的WebService就能正确返回标准的JSON数据,同时也完成了把学生数据对象转成JSON的需求。

内容的提问来源于stack exchange,提问作者Raju

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 17:47:37