2011-11-17 40 views
2

我已将C#中的字符串&传递给JSON值,需要将其转换为DataTable。将JSON作为字符串转换为C#中的DataTable#

我已经在Android部分完成,(使一个JSON作为字符串)

public void getUploadTableData(){ 
    DBAdapter dbAdapter = DBAdapter.getDBAdapterInstance(this); 
    dbAdapter.openDataBase(); 
    try { 
     if(uploadTable.size() > 0){ 
      for (Map.Entry<Integer, String> entry : uploadTable.entrySet()) { 
       int key = entry.getKey(); 
       String value = entry.getValue(); 

       JSONObject invHeader = new JSONObject(); 

       if(value.equals("WMInvoiceHeader")){ 
        String query = "SELECT BusinessUnit,ExecutiveCode,InvoiceNo,SalesCategory,RetailerCode," + 
            " RetailerCodeSon,InvoiceDate,GrossValue,InvoiceValue,TotalLineDiscount," + 
            " FROM WMInvoiceHeader " + 
            " WHERE (CancelFlag IS NULL OR CancelFlag ='0')"; 
        ArrayList<?> stringList = dbAdapter.selectRecordsFromDBList(query, null); 
        if(stringList.size() > 0){ 
          for (int i = 0; i < stringList.size(); i++) { 
           ArrayList<?> arrayList = (ArrayList<?>) stringList.get(i); 
           ArrayList<?> list = arrayList; 

           invHeader.put("BusinessUnit",(String)list.get(0)); 
           invHeader.put("ExecutiveCode",(String)list.get(1)); 
           invHeader.put("InvoiceNo",(String)list.get(2)); 
           invHeader.put("SalesCategory",(String)list.get(3)); 
           invHeader.put("RetailerCode",(String)list.get(4)); 
           invHeader.put("RetailerCodeSon",(String)list.get(5)); 
           invHeader.put("InvoiceDate",(String)list.get(6)); 
           invHeader.put("GrossValue",(String)list.get(7)); 
           invHeader.put("InvoiceValue",(String)list.get(8)); 
           invHeader.put("TotalLineDiscount",(String)list.get(9)); 


          } 
          System.out.println("----invHeader---" + invHeader.toString()); 
        } 
        soapPrimitiveData("WMInvoiceHeader", strBusinessUnit, strExecutive, invHeader.toString()); 
       } 

      // System.out.println("----invHeader---" + invHeader.toString()); 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

这是我的web服务的一部分....

// ksoap2 calling wcf 
public SoapPrimitive soapPrimitiveData(String tablename,String strBusinessUnit, String strExecutive,String jsonString) throws IOException,XmlPullParserException { 
    SoapPrimitive responsesData = null; 
    SoapObject requestData = new SoapObject(NAMESPACE, METHOD_NAME); // set 

    requestData.addProperty("strBusinessUnit", strBusinessUnit); 
    requestData.addProperty("strExecutive", strExecutive); 
    requestData.addProperty("strTableName", tablename); 
    requestData.addProperty("jsonContent", jsonString); 
    SoapSerializationEnvelope envelopes = new SoapSerializationEnvelope(SoapEnvelope.VER11); // put all required data into a soap//// envelope 
    envelopes.dotNet = true; 
    envelopes.setOutputSoapObject(requestData); 
    AndroidHttpTransport httpTransport = new AndroidHttpTransport(APPURL); 
    httpTransport.debug = true; 


    try { 
     httpTransport.call(SOAP_ACTION, envelopes); 
     responsesData = (SoapPrimitive) envelopes.getResponse(); 


    } catch (SocketException ex) { 
     Log.e("Error : " , "Error on soapPrimitiveData() " + ex.getMessage()); 
     ex.printStackTrace(); 
    } catch (Exception e) { 
     Log.e("Error : " , "Error on soapPrimitiveData() " + e.getMessage()); 
     e.printStackTrace(); 
    } 
    return responsesData; 
} 

这是我C# code

public bool convertJSONToDataSet(string strBusinessUnit, string strExecutiveCode, string strTableName, string jsonContent) 
    { 
     bool status =false; 

     DataTable dataTable = JsonConvert.DeserializeObject<DataTable>(jsonContent); 
     status = UpdateUploadData(strBusinessUnit, strExecutiveCode, strTableName, dataTable); 
     return status; 
    } 

当我调用webservice这个方法转换部分给出错误。它说Additional text found in JSON string after finishing deserializing object.

这是我的JSON结果在C#

{ 
"SpecialDiscountFlag": "0", 
"TotalLineDiscount": "0", 
"ExecutiveCode": "TEST001", 
"InvoiceValue": "3000", 
"InvoiceDate": "2011-11-17", 
"RouteCode": "VRT002", 
"RetailerCode": "TEST0007", 
"HeaderDiscountFlag": "1", 
"GrossValue": "3000", 
"UploadedOn": "2011-11-17", 
"SalesType": "O", 
"VisitNumber": "26", 
"UploadFlag": "1", 
"InvoiceNo": "26", 
"SalesCategory": "VSAO", 
"BusinessUnit": "MASS", 
"VisitSequence": "1", 
"UploadedBy": "TEST001", 
"TotalHeaderDiscount": "0" 
} 

请告诉我什么是错在这里。

在C#I want to do the Convert JSON as String to DataTable

回答

3

JSON字符串应该是象下面这样:

{ 
    "List": [ 
     { 
      "ProjectId": 504, 
      "RowId": 1, 
      "ProjectName": "Google", 
      "Member": "Private" 
     }, 
     { 
      "ProjectId": 503, 
      "RowId": 2, 
      "ProjectName": "Facebook", 
      "Member": "Public" 
     } 
    ] 
} 

“列表”当作你的表名和行处理的DataTable
大括号内数据 要验证json字符串,您可以使用此网站:http://jsonlint.com/

+0

是的。谢谢alsp correct.I在虚拟客户端网站尝试了这些东西。我有同样的错误。纠正JSON后。新的格式为:'{'SpecialDiscountFlag':'0','TotalLineDiscount':'0','ExecutiveCode':'TEST001','InvoiceValue':'3000','InvoiceDate':'2011-11-17' , 'RouteCode': 'VRT002', 'RetailerCode': 'TEST0007', 'HeaderDiscountFlag': '1', 'GrossValue': '3000', 'UploadedOn': '2011-11-17', 'SalesType':” O”, 'VisitNumber': '26', 'UploadFlag': '1', 'InvoiceNo': '26', 'SalesCategory': 'VSAO', 'BusinessUnit': 'MASS', 'VisitSequence': '1' ,'UploadedBy':'TEST001','TotalHeaderDiscount':'0'}' – Piraba

+0

我也是这样做的,同样的错误。这是在C#中的正确方法。我总是在这里得到错误'DataTable dataTable = JsonConvert.DeserializeObject (jsonContent); ' – Piraba

+0

格式您的代码完全一样:'“[{”SpecialDiscountFlag“:”0“,”TotalLineDiscount“:”0“,”ExecutiveCode“:”0“}]”' – Priyank