2016-04-14 15 views
0

Ich habe die Newtonsoft.Json zum Konvertieren von Daten in JSON-Format verwendet.Konvertieren von Daten in das JSON-Format

habe ich den folgenden Code schreiben:

[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; 
} 

Also es gibt mir die folgenden Ausgang:

enter image description here

Aber ich möchte die Ausgabe wie:

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

So Wie kann ich es von XML zu Json konvertieren. ?

+6

Was ist der Unterschied zwischen den zwei Ausgängen? –

+0

Setzen Sie den Anfrage-Inhaltstyp auf Client-Seite auf application/json? – elvin

+0

@AndreasSchwarz Entschuldigung. Bitte überprüfen Sie das Bild. – deepak

Antwort

2

Ich führe Ihre Lösung in einer Konsolenanwendung und ich kann das Problem deutlich sehen. Wenn Sie JSON nicht manuell erstellen, wird das Problem verschwinden. Da ich keine Datenbank habe, habe ich meine Datenzeilen manuell hinzugefügt. Hoffe das wird helfen.

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

Ja. Du hast recht. Bitte überprüfe mein Bild in Frage. – deepak

0

Blick in den Codes, die Sie bereits erklärt, dass Ihr Ausgabetyp JSON ist, so auf den Antwortdatum wird es einen JSON-String zurück.

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

Und Sie erklärte auch, dass dies ein ScriptMethod ist. Mein Gedanke ist, dass Sie Ihre App testen, indem Sie Ihren Code ausführen und auf die URL des Webdienstes zugreifen - z. B. http://localhost/test.asmx und klicken Sie auf die Schaltfläche zum Aufrufen Ihrer Methode DataTableToJSONWithJSONNet. Dieser Ansatz zeigt wirklich JSON Ergebnis an XML Format. Der beste Weg, um Ihren eigenen Code zu testen, besteht darin, den Web-Service unter Verwendung von etwa jQuery Ajax oder gleichwertig (Client-Skripte) aufzurufen.

Sie können Ihren Code so etwas wie dies ändern, um die Ausgabe, die Sie suchen zu erreichen:

[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() { } 
} 
Verwandte Themen