2016-04-14 28 views
0

データをjson形式に変換するのに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に変換できますか? ?

+6

あなたが探しているの出力を達成するために、このような何かにあなたのコードを変更できますか? –

+0

クライアント側でリクエストのコンテンツタイプをapplication/jsonに設定していますか? – elvin

+0

@AndreasSchwarz申し訳ありません。画像を確認してください。 – deepak

答えて

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; 
     }  
    } 
} 
+0

はい。あなたが正しいです。問題の画像を確認してください。 – deepak

0

コードを調べると、出力はJSONの型であると既に宣言されているため、応答データではJSON文字列が返されます。

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

そして、あなたはまた、これはScriptMethodであることを宣言しました。あなたのコードを実行し、ウェブサービスのURLにアクセスして、例えばhttp://localhost/test.asmxDataTableToJSONWithJSONNetメソッドの呼び出しボタンをクリックして、あなたのアプリケーションをテストしていると思います。この方法は実際にJSONの結果をの形式で囲んで表示します。独自のコードをテストする最良の方法は、jQuery Ajaxまたは同等のもの(クライアントスクリプト)を使用してWebサービスを呼び出すことです。 2つの出力の違いは何

[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() { } 
} 
関連する問題