2011-08-19 5 views
0

J'ai C# WCF service.Il je veux convertir en JSON String.DataSet contenir plus de tableau venant bientôt entraîner un mauvais format json.JSON Format - convertir Dataset à JSON

{ 
"Target1": [ 
    { 
     "BusinessUnit": "MASS", 
     "RetailerCode": "TEST0002" 
    }, 
    { 
     "BusinessUnit": "MASS", 
     "RetailerCode": "TEST0008" 
    } 
] 
}{ 
"PDCheque1": [ 
    { 
     "BusinessUnit": "MASS", 
     "AccountCode": "TEST0003" 
    } 
] 
} 0 { 
"OutStanding1": [ 
    { 
     "BusinessUnit": "MASS", 
     "Year": "2010" 
    }, 
    { 
     "BusinessUnit": "MASS", 
     "Year": "2010" 
    } 
] 

}

Voici la méthode coverting:

//Converting dataset to json 
    public String ConverTableToJson(DataSet dsDownloadJson){ 

     String tableData = ""; 
     StringBuilder Sb = new StringBuilder(); 
     Sb.Append("{\""); 

     foreach (DataTable dt in dsDownloadJson.Tables) 
     { 
      DataTable dtDownloadJson = dt; 
      string[] StrDc = new string[dtDownloadJson.Columns.Count]; 
      string HeadStr = string.Empty; 

      Sb.Append(dtDownloadJson.TableName + "1\" : ["); 

      if (dtDownloadJson.Rows.Count > 0) 
      { 
       for (int i = 0; i < dtDownloadJson.Columns.Count; i++) 
       { 
        StrDc[i] = dtDownloadJson.Columns[i].Caption; 
        HeadStr += "\"" + StrDc[i] + "\" : \"" + StrDc[i] + i.ToString() + "¾" + "\","; 
       } 
       if (HeadStr.Length > 0) 
       { 
        HeadStr = HeadStr.Substring(0, HeadStr.Length - 1); 

        for (int i = 0; i < dtDownloadJson.Rows.Count; i++) 
        { 

         string TempStr = HeadStr; 
         Sb.Append("{"); 

         for (int j = 0; j < dtDownloadJson.Columns.Count; j++) 
         { 
          TempStr = TempStr.Replace(dtDownloadJson.Columns[j] + j.ToString() + "¾", dtDownloadJson.Rows[i][j].ToString()); 
         } 

         Sb.Append(TempStr + "},"); 
        } 

        Sb = new StringBuilder(Sb.ToString().Substring(0, Sb.ToString().Length - 1)); 
       } 
       else 
       { 
        Sb.Append("0 }"); 
       } 


      } 
      else 
      { 
       Sb.Append("0 }"); 
      } 
      Sb.Append("]}"); 

     } 
     return Sb.ToString(); ; 

    } 

Si la table ne contient pas d'enregistrements alors il faut revenir "0" comme `Tablename [{0}] »

Son venant comme ceci.Il est faux dans le 2e ensemble PDCheque1 lieu.

Comment je veux formater?

Dans Android, je veux gt le chaque ensemble en utilisant le nom de table i.e PDCheque1, «Target1» comme sage.

1er set est ok pour obtenir le result.When je passe JSONArray array = jsonobject.getJSONArray(tablename);' It say no `PDCheque1``

S'il vous plaît aidez-moi ...

Merci à l'avance

Répondre

1

Vous devriez envisager de créer une structure JSONObject et laisser la bibliothèque json s'inquiéter du formatage.

Altough, si vous le voulez vraiment fait de cette façon, la voici:

//Converting dataset to json 
public String ConverTableToJson(DataSet dsDownloadJson) { 
    String tableData = ""; 
    StringBuilder Sb = new StringBuilder(); 
    Sb.Append("{"); 

    foreach (DataTable dtDownloadJson in dsDownloadJson.Tables) { 
     string HeadStr = string.Empty; 

     Sb.Append("\"" + dtDownloadJson.TableName + "1\": ["); 

     for (int j = 0; j < dtDownloadJson.Rows.Count; j++) { 
      Sb.Append("{"); 
      for (int i = 0; i < dtDownloadJson.Columns.Count; i++) { 
       string caption = dtDownloadJson.Columns[i].Caption; 
       Sb.Append("\"" + caption + "\" : \"" + dtDownloadJson.Rows[i][j].ToString() + "\","); 
      } 
      Sb.Append("},"); 
     } 
     Sb.Append("],"); 
    } 
    Sb.Append("}"); 
    return Sb.ToString(); 
} 
1

Je ne comprends pas vraiment votre question , mais je vais essayer de vous aider: Le fichier que vous parlez est un JSONArray. Lorsque vous analysez le fichier, il renvoie un jsonTokener. Vous devez obtenir le jsonarray de celui-ci.

JSONTokener tokener = new JSONTokener(yourfileinString); 
JSONArray array = (JSONArray) tokener.nextValue(); 
JSONObject object = array.getJsonObject(0); // Here you get the object containing the array //Target1 
For PDCheque1, just : 

JSONObject pdcheque = array.getJsonObject(1); 
if(pdcheque.has("PDCheque1")) { 
    JSONArray pdchequeArray = pdcheque.getJSONArray("PDCheque1"); 
    JSONObject pdchequeObject = pdchequeArray.getJSONObject(0); // 0 is the index, there is only one value //here 
    if(pdcheque.has("BusinessUnit") { 
     String businessUnit = pdcheque.getString("BusinessUnit"); 
    } 
} 

Si ce n'est pas la réponse que vous attendiez, essayez de reformuler votre question.

1

Ne pas réinventer la roue. Obtenez cette bibliothèque: http://json.codeplex.com/

Et jeter un oeil à l'aide: http://james.newtonking.com/projects/json/help/

Il est .net 4.0. Vous pouvez instintiate l'objet puis sérialiser:

string output = JsonConvert.SerializeObject(product); 

Ou utilisez le JsonWriter Classe:

using (JsonWriter jsonWriter = new JsonTextWriter(sw)) 
{ 
    jsonWriter.Formatting = Formatting.Indented; 

    jsonWriter.WriteStartObject(); 
    jsonWriter.WritePropertyName("CPU"); 
    jsonWriter.WriteValue("Intel"); 
    jsonWriter.WritePropertyName("PSU"); 
    jsonWriter.WriteValue("500W"); 
    jsonWriter.WritePropertyName("Drives"); 
    jsonWriter.WriteStartArray(); 
    jsonWriter.WriteValue("DVD read/writer"); 
    jsonWriter.WriteComment("(broken)"); 
    jsonWriter.WriteValue("500 gigabyte hard drive"); 
    jsonWriter.WriteValue("200 gigabype hard drive"); 
    jsonWriter.WriteEnd(); 
    jsonWriter.WriteEndObject(); 
} 

have fun.