2015-06-10 6 views
0

Мне нужно десериализовать объект. У меня есть класс запроса;Deserialize Object Ошибка JSON

public class LegacyDataRequest 
    { 
     public string RowId { get; set; } 
     public string SchemaName { get; set; } 
     public string TableName { get; set; } 
     public string SelectStatement { get; set; } 
    } 

И вот класс ответа;

public class LegacyDataResponse 
    { 
     public List<KeyData> List { get; set; } 
    } 

Я десериализую это;

var res = Newtonsoft.Json.JsonConvert.DeserializeObject<List<LegacyDataResponse>>(response.Substring(1, response.Length - 2)); 

И вот ответ;

[{"Key":"MUSTERI_NO","Data":"26594"},{"Key":"ADRES_KOD","Data":"E"},{"Key":"ADRES","Data":"DENİZ SEMA Site: 3"},{"Key":"SEMT","Data":"DUMLUPINAR"},{"Key":"IL_KOD","Data":"034"},{"Key":"POSTA_KOD","Data":""},{"Key":"ULKE_KOD","Data":"TR"},{"Key":"EMAIL","Data":""},{"Key":"ILK_GECERLILIK_TARIHI","Data":"7/28/2009 12:00:00 AM"},{"Key":"SON_GECERLILIK_TARIHI","Data":""},{"Key":"ILCE_KOD","Data":"10"},{"Key":"YARATAN_KULLANICI_KODU","Data":""},{"Key":"YARATILDIGI_TARIH","Data":""},{"Key":"EXTRE_ADRES_KOD_F","Data":"E"},{"Key":"DAHILI_NO","Data":""},{"Key":"ISYERI_UNVANI","Data":""},{"Key":"ADRES_TEYIT","Data":"E"},{"Key":"ADRES_TEYIT_TARIHI","Data":"9/21/2013 12:00:00 AM"},{"Key":"TELEFON_TEYIT","Data":"E"},{"Key":"TELEFON_TEYIT_TARIHI","Data":"9/25/2013 12:00:00 AM"},{"Key":"FAX_TEYIT","Data":"H"},{"Key":"FAX_TEYIT_TARIHI","Data":""},{"Key":"EMAIL_TEYIT","Data":"E"},{"Key":"EMAIL_TEYIT_TARIHI","Data":"9/25/2013 12:00:00 AM"},{"Key":"CONTACT_MOBILE_NUMBER","Data":"1"},{"Key":"CONTACT_EMAIL","Data":"1"},{"Key":"DIGER1_TEL_ALAN_KOD","Data":""},{"Key":"DIGER1_TEL_NO","Data":""},{"Key":"DIGER2_TEL_ALAN_KOD","Data":""},{"Key":"DIGER2_TEL_NO","Data":""},{"Key":"TEL_ALAN_KOD","Data":"216"},{"Key":"TEL_NO","Data":""},{"Key":"GSM_ALAN_KOD","Data":"532"},{"Key":"GSM_NO","Data":""},{"Key":"FAX_ALAN_KOD","Data":""},{"Key":"FAX_NO","Data":""}] 

У меня есть ошибка;

Не может десериализации текущего объекта JSON (например, { "имя": "значение"}) в тип 'System.Collections.Generic.List`1 [BankPozitif.CRM.Library.ZeusApi.LegacyDataResponse] , так как тип требует массива JSON (например, [1,2,3]) для десериализации правильно.

Чтобы исправить эту ошибку, либо изменить JSON в массив JSON (например [1,2,3]) или изменить десериализованное типа, так что это нормально .NET типа (например, не примитивный тип, как целое , а не тип коллекции как массив или список), которые можно десериализовать из объекта JSON. JsonObjectAttribute также можно добавить к типу, чтобы заставить его десериализовать объект JSON.

Как это можно решить?

+0

Как вы получили от JSON, который возвращает сопоставление значений ключа в класс с этими свойствами? Они вообще не существуют в вашем JSON. –

+1

Почему вы выполняете Подстроку()? который удаляет номинанты массива [], следовательно, ваша ошибка. – zaitsman

+0

@YuvalItzchakov Это класс запроса. Класс ответа – Jungleman

ответ

0

Я думаю, что проблема здесь

{"Key":"ADRES","Data":"DENİZ SEMA Site: 3"} 

изменить его

{"Key":"ADRES","Data":"DENİZ SEMA", "Site": 3"} 
+0

Это строка ответа. Это не проблема. Должен быть 2 параметра; Ключ и данные, это содержание данных. – Jungleman

0

Я нашел решение. Я удаляю «.SubString()», и проблема решена.

0

Вы deserialize к неправильному типу.

public class Item 
{ 
    public string Key { get; set; } 
    public string Data { get; set; } 
} 

var res = JsonConvert.DeserializeObject<List<Item>>(response));