Преобразование строки Json в датированные - PullRequest
0 голосов
/ 19 февраля 2019

У меня следующая строка 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>));

РЕДАКТИРОВАТЬ-2:

У меня естьудалил внешний [] из моей строки json

Пожалуйста, помогите мне в этом.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Наконец-то я посчитал, что это ваш 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));

После выполнения вышеперечисленных действий вы все равно получите list как ноль

Поэтому добавьте модификатор доступа public к свойству list в своем классе JsonData и свойство 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>();

Примечание: Вам необходимо установить newtonsoft.json пакет из диспетчера пакетов Nuget.И тогда вам нужно импортировать using Newtonsoft.Json.Linq; пространство имен в вашу программу

Вывод: Вы выводите таблицу данных как

enter image description here

0 голосов
/ 19 февраля 2019

Ваша строка json неверна.Он начинается и заканчивается [ & ], что подразумевает массив.Элементы массива не имеют пар ключ / значение.Просто элементы.

Либо

  1. Заменить начало и конец на { и }.или же;
  2. Удалите ключ 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 модификаторов доступа в ваших классах)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...