1

在我来这里之前我做了很多研究,没有一个“解决方案”给了我我想要的东西,所以这就是我在这里发帖的原因。

我正在使用 ASP.NET C#。

我有一个网络服务,我目前正试图返回 JSON 字符串而不是 xml。

这是服务的一种方法:

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public String SelectHrana(String ime)
    {
        //HttpResponse response = client.execute(httpGet);
        DataSet ds = new DataSet();

        SqlConnection con = new SqlConnection(cnnstring);
        con.Open();
        String pom = "select * from Food where Name like ('%' + @Ime + '%')";
        SqlCommand cmd = new SqlCommand(pom, con);
        cmd.Parameters.AddWithValue("@Ime", ime);
        cmd.ExecuteNonQuery();

        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(ds);
        con.Close();

        return JsonConvert.SerializeObject(ds, Newtonsoft.Json.Formatting.Indented);

    }

这将返回以下内容:

<string xmlns="http://tempuri.org/"> { "Table": [ { "ID": 1, "Name": "boiled egg", "Calories": 155 }, { "ID": 2, "Name": "strawberry", "Calories": 33 } ] } </string>

谁能告诉我如何摆脱<string xmlns="http://tempuri.org/">开头和</string>结尾的那个?

谢谢你。

4

1 回答 1

0

尽管所有“专家”都说“很容易”,但我没有找到任何从 WCF 项目或 ASMX 返回纯 JSON 的好方法来自 Web 服务 JSON 的对象。

通过使用:

JavaScriptSerializer serializer = new JavaScriptSerializer();
String myJSON= serializer.Serialize(<your object>);

而“myJSON”将保存 JSON。

JavaScriptSerializer 无法处理 DataTable\DataSet 所以你可以做的是将 DataSet 插入 DataTable 并使用以下方法将其转换为 JSON(字符串)

 public static string GetDataTableToJSONString(DataTable table)
        {

            List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();

            foreach (DataRow row in table.Rows)
            {
                Dictionary<string, object> dict = new Dictionary<string, object>();

                foreach (DataColumn col in table.Columns)
                {
                    dict[col.ColumnName] = row[col];
                }
                list.Add(dict);
            }
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            return serializer.Serialize(list);
        }

//返回 JSONP 另外,有时您需要以 JSONP 格式返回它,所以我使用了一个 Request 参数,如果它存在,我将它用作我的 JSON 的包装器,位于我所针对的页面上的 Page_Load 方法的末尾客户端 :

 String callBack = Request["callback"];
 if (callBack != null)
            {

                Response.Write(callBack + "(" + GetDataTableToJSONString(GetDiamonds(paramList)) + ")");
            }
            else
                Response.Write(GetDataTableToJSONString(GetDiamonds(paramList)));
于 2013-11-07T10:32:13.460 回答