【问题标题】:Convert JSON as String to DataTable in C#在 C# 中将 JSON 作为字符串转换为 DataTable
【发布时间】:2011-11-17 12:10:23
【问题描述】:

我已将 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();
    }
}

这是我的网络服务部分....

// 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.

这是我在 C# 中的 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"
}

请告诉我这里出了什么问题。

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

【问题讨论】:

    标签: c# android wcf json web-services


    【解决方案1】:

    Json 字符串应如下所示:

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

    "List" 被视为您的表名,大括号内的数据被视为 DataTable 的行
    要验证 json 字符串,您可以使用此站点:http://jsonlint.com/

    【讨论】:

    • 是的。谢谢也正确。我在虚拟客户端站点中尝试了这些东西。我有同样的错误。更正 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'}
    • 我也这样做了。还是同样的错误。在 C# 中做正确的方法吗?我总是在这里出错DataTable dataTable = JsonConvert.DeserializeObject&lt;DataTable&gt;(jsonContent);
    • 格式化你的代码,就像:"[{"SpecialDiscountFlag": "0", "TotalLineDiscount": "0", "ExecutiveCode": "0"}]"
    • 你是对的。我的json格式错误。现在我更正了。再次感谢
    猜你喜欢
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 2013-03-26
    • 2017-02-04
    • 1970-01-01
    相关资源
    最近更新 更多