簡體   English   中英

Newtonsoft.Json Json轉換為數據表

[英]Newtonsoft.Json JsonConvert To Datatable

我有這樣的代碼,

DataTable dt = new DataTable();

string data = "{\"ProductId\":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77],\"ProductName\":[\"Chai\",\"Chang\",\"Aniseed Syrup\",\"Chef Anton's Cajun Seasoning\",\"Chef Anton's Gumbo Mix\",\"Grandma's Boysenberry Spread\",\"Uncle Bob's Organic Dried Pears\",\"Northwoods Cranberry Sauce\",\"Mishi Kobe Niku\",\"Ikura\",\"Queso Cabrales\",\"Queso Manchego La Pastora\",\"Konbu\",\"Tofu\",\"Genen Shouyu\",\"Pavlova\",\"Alice Mutton\",\"Carnarvon Tigers\",\"Teatime Chocolate Biscuits\",\"Sir Rodney's Marmalade\",\"Sir Rodney's Scones\",\"Gustaf's Knäckebröd\",\"Tunnbröd\",\"Guaraná Fantástica\",\"NuNuCa Nuß-Nougat-Creme\",\"Gumbär Gummibärchen\",\"Schoggi Schokolade\",\"Rössle Sauerkraut\",\"Thüringer Rostbratwurst\",\"Nord-Ost Matjeshering\",\"Gorgonzola Telino\",\"Mascarpone Fabioli\",\"Geitost\",\"Sasquatch Ale\",\"Steeleye Stout\",\"Inlagd Sill\",\"Gravad lax\",\"Côte de Blaye\",\"Chartreuse verte\",\"Boston Crab Meat\",\"Jack's New England Clam Chowder\",\"Singaporean Hokkien Fried Mee\",\"Ipoh Coffee\",\"Gula Malacca\",\"Rogede sild\",\"Spegesild\",\"Zaanse koeken\",\"Chocolade\",\"Maxilaku\",\"Valkoinen suklaa\",\"Manjimup Dried Apples\",\"Filo Mix\",\"Perth Pasties\",\"Tourtière\",\"Pâté chinois\",\"Gnocchi di nonna Alice\",\"Ravioli Angelo\",\"Escargots de Bourgogne\",\"Raclette Courdavault\",\"Camembert Pierrot\",\"Sirop d'érable\",\"Tarte au sucre\",\"Vegie-spread\",\"Wimmers gute Semmelknödel\",\"Louisiana Fiery Hot Pepper Sauce\",\"Louisiana Hot Spiced Okra\",\"Laughing Lumberjack Lager\",\"Scottish Longbreads\",\"Gudbrandsdalsost\",\"Outback Lager\",\"Flotemysost\",\"Mozzarella di Giovanni\",\"Röd Kaviar\",\"Longlife Tofu\",\"Rhönbräu Klosterbier\",\"Lakkalikööri\",\"Original Frankfurter grüne Soße\"]}";

dt = JsonConvert.DeserializeObject<DataTable>(data);

如果我在在線json編輯器上以remove \\ char形式運行此數據,則會顯示出來。 但是在Visual Studio中,有一個錯誤,

Unexpected JSON token when reading DataTable. Expected StartArray, got StartObject. Path '', line 1, position 1.

在最后一個代碼位置。

我想使用Newtonsoft插件將數據轉換為DataTable。 我怎么解決這個問題? 謝謝。

您的json必須是要轉換為DataTable的對象數組,它必須像這樣開始:

"[{\"ProductId\..........

結束像這樣:

....,\"fieldName\":Value}]"

您的data無法轉換為Datatabe

當我嘗試您的代碼時,它給了我:

完成反序列化對象后,在JSON字符串中找到其他文本。

但是,當我這樣做時:

object obj  = JsonConvert.DeserializeObject(data); 

工作正常。

您也可以創建自己的類:

public class MyObject
{
    public int[] productId { get; set; }
    public string[] ProductName { get; set; }
}

MyObject obj = JsonConvert.DeserializeObject<MyObject>(data); 

因此,對於您擁有的不同類型的數據,可以創建不同的類:

    public class MyObject2{
    ...
    }

    public class MyObject3{
    ...
    }
    ...

Object obj = null;
try{
 obj = JsonConvert.DeserializeObject<MyObject>(data); 
}catch{
      try{
      obj = JsonConvert.DeserializeObject<MyObject2>(data);
      }catch{
           try{
             obj = JsonConvert.DeserializeObject<MyObject3>(data);
           }catch{
             //Log error new type of data received
             throw new Exception();
           }
      }

}
if (obj.GetType() == typeof(MyObject)){
   ...
}else if (obj.GetType() == typeof(MyObject2)){
   ...
}
....

暫無
暫無

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

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