Каков новый метод десериализации объекта JSON в DataSet в C #? - PullRequest
0 голосов
/ 19 сентября 2019

Вот мой пример кода:

string json = "[{Vehicle:BMW With Ethiraj,Date:30 Jul 2013 09:24 AM,Location:Hauz Khas Enclave New Delhi Delhi India, Speed:42}]";

с помощью пользовательского метода

DataTable dt = JsonStringToDataTable (json);

по методу Newtonsoft

DataSet ds = (DataSet)Newtonsoft.Json.JsonConvert.DeserializeObject(json);

Метод JsonStringToDataTable: -

public DataTable JsonStringToDataTable(string jsonString)
        {
            DataTable dt = new DataTable();
            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)
                {
                    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;
        }

, но выше обоих методов - ошибка выброса

  1. Ошибка модели JsonStringToDataTable -> Дополнительная информация: Ошибка синтаксического анализа имени столбца: Транспортное средство: BMW с Ethiraj
  2. Ошибка модели JSON -> Дополнительная информация: При анализе значения обнаружен непредвиденный символ: B. Путь'[0] .Vehicle', строка 1, позиция 10.

Почему я пытаюсь использовать этот JSON в набор данных, означает необходимость экспортировать Excel, PDF и т. Д. С помощью Jquery-стороны Jjery ajax-метод, который мы отправляемДанные и процессы JSON в Web-методе не зависят от кода C #, а также я пытался экспортировать в Excel с помощью метода jquery, но не поддерживает Internet Explorer, поэтому я пытаюсь сделать это DeserializeObject, так что у всех есть другая идея, пожалуйста, поделитесь

1 Ответ

2 голосов
/ 19 сентября 2019

Вы получаете ошибку с методом Newtonsoft, потому что строка json имеет неправильный формат.Вы должны поместить значения в одинарные / двойные кавычки в эту строку json, после чего ваш образец json будет выглядеть примерно так:

string json = "{\"arr\":[{\"Vehicle\":\"BMW With Ethiraj\",\"Date\":\"30 Jul 2013 09:24 AM\",\"Location\":\"Hauz Khas Enclave New Delhi Delhi India\", \"Speed\":\"42\"}]}";

После этого используйте метод Newtonsoft следующим образом:

DataSet ds = Newtonsoft.Json.JsonConvert.DeserializeObject<DataSet>(json);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...