将数据转换为JSON格式

时间:2016-04-14 07:20:56

标签: asp.net json json.net asmx

我使用Newtonsoft.Json将数据转换为json格式。

我写了以下代码:

[WebMethod(EnableSession = true)]
[ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
public string DataTableToJSONWithJSONNet()
{
    DataTable dt = new DataTable();
    dt.Columns.Add("id", typeof(Int32));


    DataSet ds = new DataSet();
    ds = cls.ReturnDataSet("Get_data",
          new SqlParameter("@Yourid", "5"));

    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
    {
        dt.Rows.Add(Convert.ToInt32(ds.Tables[0].Rows[i]["id"].ToString()));

    }

    string JSONString = string.Empty;
    JSONString = "{" + "''mydata''"+":" + JsonConvert.SerializeObject(dt) + "}";
    return JSONString;
}

所以它给了我以下输出:

enter image description here

但我希望输出如下:

{"mydata":[{"id":125},{"id":137},{"id":249},{"id":201},{"id":124},  
      {"id":173},{"id":160},{"id":153},{"id":146},{"id":168}]} 

那么如何从xml转换为json。 ?

2 个答案:

答案 0 :(得分:2)

我在控制台应用程序中运行您的解决方案,我可以清楚地看到问题所在。如果你避免手动构建json,问题就会消失。由于我没有数据库,因此我手动添加了数据行。希望这会有所帮助。

using Newtonsoft.Json;
using System;
using System.Data;
namespace Test
{
    class MyDataContainer
    {
        public DataTable mydata { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write(DataTableToJSONWithJSONNet());
            Console.Read();
        }
        static string DataTableToJSONWithJSONNet()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("id", typeof(Int32));

            dt.Rows.Add(1);
            dt.Rows.Add(2);
            MyDataContainer cont = new MyDataContainer();
            cont.mydata = dt;
            string JSONString = string.Empty;
            JSONString = JsonConvert.SerializeObject(cont);
            //to see your attempt uncomment the blow lines
            //Console.Write("{" + "''mydata''"+":" + JsonConvert.SerializeObject(dt) + "}");
            //Console.WriteLine();
            return JSONString;
        }      
    }   
}

答案 1 :(得分:0)

查看您的代码,您已经声明您的输出是JSON类型,因此在响应数据上它将返回一个JSON字符串。

[ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]

你还宣称这是一个ScriptMethod。我的想法是,您通过运行代码并访问网络服务的网址来测试您的应用 - 例如http://localhost/test.asmx并点击DataTableToJSONWithJSONNet方法上的调用按钮。此方法将真正显示 XML 格式附带的 JSON 结果。测试自己的代码的最佳方法是使用 jQuery Ajax 或等效的(客户端脚本)来调用Web服务。

您可以将代码更改为此类代码以实现您正在寻找的输出:

[WebMethod(EnableSession = true)]
[ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
public MyResponse DataTableToJSONWithJSONNet()
{
    DataTable dt = new DataTable();
    dt.Columns.Add("id", typeof(Int32));


    DataSet ds = new DataSet();
    ds = cls.ReturnDataSet("Get_data",
          new SqlParameter("@Yourid", "5"));

    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
    {
        dt.Rows.Add(Convert.ToInt32(ds.Tables[0].Rows[i]["id"].ToString()));

    }

    MyResponse result = new MyResponse();
    result.mydata = dt;
    return result;
}

class MyResponse
{
    private object _mydata;
    public object mydata { get { return this._mydata; } set { this._mydata = value; } }
    public MyResponse() { }
}