如何在Json String To DataTable转换中处理逗号(,)?

时间:2017-10-07 06:16:12

标签: c# asp.net json

在我的asp.net Web应用程序中,我使用的函数将Json字符串转换为数据表 .Function在处理带有逗号(,)的数据时出现错误。
我收到了错误:string ColumnsNameString = ColumnsNameData.Substring(0, idx - 1).Replace("\"", "");

enter image description here

这是我正在使用的 C#功能

public class ConvertJsonStringToDataTable
{
    public DataTable JsonStringToDataTable(string jsonString)
    {
        DataTable dt = new DataTable();
        if (jsonString != "[]" && jsonString != "undefined")
        {
            string[] jsonStringArray = Regex.Split(jsonString.Replace("[", "").Replace("]", ""), "},{");
            List<string> ColumnsName = new List<string>();

            foreach (string jSA in jsonStringArray)
            {
                string[] jsonStringData = Regex.Split(jSA.Replace("{", "").Replace("}", ""), ",");
                foreach (string ColumnsNameData in jsonStringData)
                {
                    if (ColumnsNameData != "")
                    {
                        try
                        {
                            int idx = ColumnsNameData.IndexOf(":");
                            string ColumnsNameString = ColumnsNameData.Substring(0, idx - 1).Replace("\"", "");
                            if (!ColumnsName.Contains(ColumnsNameString))
                            {
                                ColumnsName.Add(ColumnsNameString);
                            }
                        }
                        catch (Exception ex)
                        {
                            throw new Exception(string.Format("Error Parsing Column Name : {0}", ColumnsNameData));
                        }
                    }
                }
                break;
            }

            foreach (string AddColumnName in ColumnsName)
            {
                dt.Columns.Add(AddColumnName);
            }

            foreach (string jSA in jsonStringArray)
            {
                string[] RowData = Regex.Split(jSA.Replace("{", "").Replace("}", ""), ",");
                DataRow nr = dt.NewRow();
                foreach (string rowData in RowData)
                {
                    try
                    {
                        int idx = rowData.IndexOf(":");
                        string RowColumns = rowData.Substring(0, idx - 1).Replace("\"", "");
                        string RowDataString = rowData.Substring(idx + 1).Replace("\"", "");
                        nr[RowColumns] = RowDataString;
                    }
                    catch (Exception ex)
                    {
                        continue;
                    }
                }
                dt.Rows.Add(nr);
            }
            return dt;
        }

        return dt;
    }
}

Jquery功能

的一部分
var IdentificationMark = $("[id*=txtIdentificationMark]").val();
var Remarks = $("[id*=txtRemarks]").val();

var dataCustMaster = { IdentificationMark: IdentificationMark, Remarks: Remarks };
var DataCustMaster = (JSON.stringify(dataCustMaster));

if (hasError == false) {
    $.ajax({
    type: "POST",
    url: "CustomerCreation.aspx/InsertDetails",
    data: "{'dataAuthOper':'" + AuthOperData + "','dataAdds':'" + AddsData + "','dataId':'" + IdData + "','dataCustMaster':'" + DataCustMaster + "'}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: OnSuccess,
    failure: function (response) {
    alert(response.d);
  }

  });
  function OnSuccess(response, userContext, methodName) {
      location.reload(true);
      alert("Saved");
       }
  }

如何使用逗号(,)获取数据?我该如何解决这个问题?我需要做些什么改变?
请帮助我,我是初学者......

1 个答案:

答案 0 :(得分:1)

似乎对.Substring(0, idx-1)的调用返回的值小于0.

您应确保idx大于或等于0.

int idx = ColumnsNameData.IndexOf(":");

if (idx == -1) 
{
    // Do something here. You can throw an exception or return
}

string ColumnsNameString = ColumnsNameData.Substring(0, idx - 1).Replace("\"", "");
if (!ColumnsName.Contains(ColumnsNameString))
{
    ColumnsName.Add(ColumnsNameString);
}

更新

以上代码仍与您的问题相关。但是,您需要检测逗号何时位于双引号内。您的代码失败的原因是Split行,它使用逗号作为分割点创建一个字符串数组。它找到每个逗号并沿着这些行分割字符串。

您不能依赖内置方法Split来执行此操作。您必须编写自己的方法来解析字符串。如果您想获得更简单的路由,请在Ajax调用中替换逗号分隔符,并使用不同的分隔符,如pipe |,hash#或其他。