簡體   English   中英

如何使用 Newtonsoft 將 JSON 轉換為數據集

[英]How Convert JSON to Dataset using Newtonsoft

我從 Web 服務返回了以下 JSON。 當我驗證它時,它是正確的。 它有牛頓的斜線,因為其中有引號表示英寸。

"\"[{\\\"GOI\\\":34037500500.0,\\\"Ship Date\\\":\\\"2022-09-09T00:00:00\\\",\\\"Quote File\\\":\\\"9W0ZYEXA.0200500\\\",\\\"Qty\\\":1.0,\\\"Price\\\":29016.50,\\\"PCL\\\":163,\\\"Unit Version\\\":\\\"12.71\\\",\\\"Comp Version\\\":\\\"12.71\\\",\\\"Rep Office\\\":\\\"HTS fjdis\\\",\\\"Is disliw Plus High Pressure Const\\\":\\\"N\\\",\\\"List Price\\\":\\\"97764.5\\\",\\\"Model No\\\":\\\"CAH028GDGM\\\",\\\"Unit Type\\\":\\\"Dave34\\\",\\\"Unit Size\\\":\\\"28\\\",\\\"Unit Height\\\":\\\"60\\\",\\\"Unit Width\\\":\\\"90\\\",\\\"Has Electric Heat\\\":\\\"Y\\\",\\\"Electric Heat Voltage\\\":\\\"480\\\",\\\"Electric Heat KW\\\":\\\"21\\\",\\\"Electric Heat Control Type\\\":\\\"Vernier SCR\\\",\\\"Electric Heat Steps\\\":\\\"N/A\\\",\\\"Has Electric Heat Temp Control\\\":\\\"Y\\\",\\\"Has Electric Heat Disconnect\\\":\\\"Y\\\",\\\"Electric Heat Control Signal\\\":\\\"0 - 10V\\\",\\\"Supply Air Vol\\\":\\\"12500\\\",\\\"Exhaust Air Vol\\\":\\\"9595\\\"}]\""

我的代碼在 JsonConvert.DeserializeObject(searchResults) 上引發異常:

        try
        {
            HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
            if (webResponse.StatusCode == HttpStatusCode.OK)
            {
                using (Stream responseStream = webResponse.GetResponseStream())
                {
                    string searchResults = new StreamReader(responseStream, Encoding.UTF8).ReadToEnd();

                    DataSet dataSet = JsonConvert.DeserializeObject<DataSet>(searchResults);
                    DataTable dataTable = dataSet.Tables["Search Results"];
                    dataGridView1.DataSource = dataTable;
                }
            }
        }
        catch (WebException ex)
        {
            Console.WriteLine(ex.Message);
            // TODO - log error
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            // TODO - log error
        }

出現以下錯誤:

Newtonsoft.Json.JsonSerializationException: '讀取 DataTable 時出現意外的 JSON 令牌。 預期 StartArray,得到字符串。 路徑'',第 1 行,position 770。

為什么? 任何幫助將不勝感激。

您的 json 中有一個錯誤,看起來它被序列化了兩次並且您的 json 不包含任何數據集,您的 json 應該看起來像這樣

var json= "[{\"GOI\":33861123400.0,...]}"

如果你有一個 DataSet json 應該是這樣的

{\"Table1\":[{\"GOI\":33861123400.0,...]}"

但您可以立即將其轉換為 DataTable

DataTable dataTable = JsonConvert.DeserializeObject<DataTable>(searchResults);
  
 dataGridView1.DataSource = dataTable;

但如果您仍然需要一個 DataSet,您可以創建它並添加您的 dataTable

    DataSet ds = new DataSet();

    ds.Tables.Add(dataTable);
    ds.Tables[0].TableName = "Search Results";//Optional

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM