![](/img/trans.png)
[英]How to deal with a comma (,) in Json String To DataTable conversion?
[英]Json string to Datatable conversion
我有以下json字符串。
"data": {
"message": "Ok",
"success": true,
"serverTime": 1550568846,
"pageNo": 0,
"pageSize": 100,
"totalPages": 1,
"totalCount": 7,
"list": [
{
"vehicleNumber": "NL01N7848",
"deviceNumber": "358735072950479",
"vendorCode": "WE12881",
"venndorName": "kapoor Diesels",
"latitude": 12.195035555555556,
"longitude": 76.642826666666664,
"speed": 0.0,
"createdDate": 1550497439,
"location": "Unnamed Road, Byathahalli, Karnataka 571311, India",
"provider": "WHEELSEYE",
"vehicleType": "NA",
"accurate": false
},
{
"vehicleNumber": "NL01L0067",
"deviceNumber": "358735073314899",
"vendorCode": "WE12881",
"venndorName": "kapoor Diesels",
"latitude": 26.222473333333333,
"longitude": 91.702311111111115,
"speed": 0.0,
"createdDate": 1550568823,
"location": "21, Brahmaputra Industrial Park, Gauripur, Amingaon, Guwahati - Baihata Rd, Guwahati, Assam 781030, India",
"provider": "WHEELSEYE",
"vehicleType": "NA",
"ignition": false,
"accurate": false
},
{
"vehicleNumber": "NL01L1004",
"deviceNumber": "358735073306135",
"vendorCode": "WE12881",
"venndorName": "kapoor Diesels",
"latitude": 20.532204444444446,
"longitude": 85.952977777777775,
"speed": 0.0,
"createdDate": 1550568795,
"location": "Badshahi Road, Alarpur, Odisha 754025, India",
"provider": "WHEELSEYE",
"vehicleType": "NA",
"ignition": true,
"accurate": false
},
{
"vehicleNumber": "NL01L2044",
"deviceNumber": "358735073318866",
"vendorCode": "WE12881",
"venndorName": "kapoor Diesels",
"latitude": 22.567486666666664,
"longitude": 88.136897777777776,
"speed": 0.0,
"createdDate": 1550568787,
"location": "Amta-Ranihati Road, Ranihati, Mallik Bagan, West Bengal 711302, India",
"provider": "WHEELSEYE",
"vehicleType": "NA",
"ignition": false,
"accurate": false
},
{
"vehicleNumber": "NL01L2042",
"deviceNumber": "358735073311713",
"vendorCode": "WE12881",
"venndorName": "kapoor Diesels",
"latitude": 20.532215555555556,
"longitude": 85.953057777777772,
"speed": 0.0,
"createdDate": 1550568825,
"location": "Badshahi Road, Alarpur, Odisha 754025, India",
"provider": "WHEELSEYE",
"vehicleType": "NA",
"ignition": false,
"accurate": false
},
{
"vehicleNumber": "NL01L6027",
"deviceNumber": "NA",
"vendorCode": "WE12881",
"venndorName": "kapoor Diesels",
"latitude": 13.265313,
"longitude": 80.11657,
"speed": 0.0,
"createdDate": 1550565467,
"location": "Tirupati Rd, Manjankaranai, Tamil Nadu 601103, India",
"provider": "WHEELSEYE",
"vehicleType": "NA",
"accurate": false
},
{
"vehicleNumber": "HR38U3103",
"deviceNumber": "NA",
"vendorCode": "WE12881",
"venndorName": "kapoor Diesels",
"latitude": 27.594013,
"longitude": 77.59916,
"speed": 44.0,
"createdDate": 1550568763,
"location": "NH19, Bharthia, Uttar Pradesh 281406, India",
"provider": "WHEELSEYE",
"vehicleType": "NA",
"ignition": true,
"accurate": false
}
]
}
我想將其轉換為C#類對象。 我正在使用以下類結構:
class Data
{
JsonData data { get; set; }
}
class JsonData
{
public string message { get; set; }
public bool success { get; set; }
public Int64 serverTime { get; set; }
public int pageNo { get; set; }
public int pageSize { get; set; }
public int totalPages { get; set; }
public int totalCount { get; set; }
List<VehicleDetails> list { get; set; }
}
class VehicleDetails
{
public string vehicleNumber { get; set; }
public string deviceNumber { get; set; }
public string vendorCode { get; set; }
public string venndorName { get; set; }
public double latitude { get; set; }
public double longitude { get; set; }
public double speed { get; set; }
public Int64 createdDate { get; set; }
public string location { get; set; }
public string provider { get; set; }
public string vehicleType { get; set; }
public bool accurate { get; set; }
}
但是每次我嘗試反序列化上面的json時,都會出現一個異常,指出傳入了無效數組
編輯:
這是反序列化的代碼:
string jsonString;
JavaScriptSerializer jSerObj = new JavaScriptSerializer();
List<Data> lstData = (List<Data>) jSerObj.Deserialize(jsonString, typeof(List<Data>));
EDIT 2:
我從json字符串中刪除了外部[]
請幫我。
最后我認為這是您的json,
{
"data": {
"message": "Ok",
"success": true,
"serverTime": 1550568846,
"pageNo": 0,
"pageSize": 100,
"totalPages": 1,
"totalCount": 7,
"list": [
{
"vehicleNumber": "NL01N7848",
...
},
{
"vehicleNumber": "NL01L0067",
...
},
]
}
}
然后,您可以將該json失效,
Data lstData = (Data)jSerObj.Deserialize(jsonString, typeof(Data));
完成上述操作后,您仍然會得到null list
因此,將訪問修飾符public
添加到JsonData
類的屬性list
中,並將data
到Data
類的data
屬性中,因此在應用公共訪問修飾符之后
class Data
{
public JsonData data { get; set; }
}
class JsonData
{
...
public List<VehicleDetails> list { get; set; }
}
替代方案:
從您的json中,如果您想將list
鍵數據直接解析為DataTable
則可以使用以下代碼
string json = File.ReadAllText(@"Path to your json file");
JToken jToken = JToken.Parse(json);
DataTable dataTable = jToken["data"]["list"].ToObject<DataTable>();
注意:您需要從Nuget軟件包管理器安裝newtonsoft.json
軟件包。 然后您需要using Newtonsoft.Json.Linq;
進行導入using Newtonsoft.Json.Linq;
程序的名稱空間
輸出:您輸出的數據表看起來像
您的json字符串無效。 它以[
& ]
開頭和結尾,這表示一個數組。 數組元素沒有鍵/值對。 只是元素。
或
{
和}
代替開始和結束。 要么; data
密鑰,僅擁有一個JsonData
數組 如果您選擇上述1.,則解析代碼應變為
Data lstData = (Data) jSerObj.Deserialize(jsonString, typeof(Data));
如果選擇了2,則應為:
List<JsonData> lstData = (List<JsonData>) jSerObj.Deserialize(jsonString, typeof(List<JsonData>));
編輯后:
您的數據仍然無效-現在沒有任何數據。 您可以使用上面的選項1對其進行解析,方法是將{
和}
附加到那里。
編輯2
您應該使用Json.NET進行反序列化-它遠遠優於JsonSerializer
代碼是:
var result = JsonConvert.DeserializeObject<Data>(jsonString);
實時示例: https : //rextester.com/WRXSO2016
(請注意,您在課程中還缺少幾個public
訪問修飾符)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.