【问题标题】:Convert data to JSON format将数据转换为 JSON 格式
【发布时间】:2016-08-05 14:30:46
【问题描述】:

我已经使用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;
}

所以它给了我以下输出:

但我想要这样的输出:

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

那么我怎样才能将它从 xml 转换为 json。 ?

【问题讨论】:

标签: asp.net json json.net asmx


【解决方案1】:

我在控制台应用程序中运行您的解决方案,我可以清楚地看到问题所在。如果您避免手动构建 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;
        }      
    }   
}

【讨论】:

  • 是的。你说的对。请检查我有问题的图片。
【解决方案2】:

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

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

您还声明这是ScriptMethod。我的想法是您正在通过运行代码并访问 Web 服务的 url 来测试您的应用程序 - 例如 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() { }
}

【讨论】:

    猜你喜欢
    • 2014-02-27
    • 2011-08-12
    • 1970-01-01
    • 2014-01-06
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 2018-03-11
    相关资源
    最近更新 更多