2013-12-12 2 views
1

Я получаю эту "System.Collections.Generic.Dictionary 2[System.String,System.Object]" is not of type "MyCustomControl.Result" and cannot be used in this generic collection ошибку при разборе JSON с помощью jvascripSerializer().DeSerialize, мои типы выглядеть, как показано нижеСинтаксический JSON с помощью десериализации в C#

class templateResponse 
{ 
    public String multicast_id; 
    public String success; 
    public String failure; 
    public String canonical_ids; 
    public Results results 
} 
public class Result 
{ 
    public String message_id; 
    public String registration_id; 
    public String error; 
} 
Public class Results : ObservableCollection<Result> 
{ 

} 

Мои данные JSON выглядеть, как показано ниже,

{"\"multicast_id\":7400896764380883211,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1351777805148960%39895cf0f9fd7ecd\"}]}" 

Это мой синтаксический анализ json данных

templateResponse result = new JavaScriptSerializer().Deserialize<templateResponse>(json); 

Пожалуйста, помогите мне преодолеть эту ошибку и сказать мне, что здесь не так?

Thanks,
Karthik.

+1

Это JSON строка неправильно отформатирована json (отсутствует стартовая скобка). Это ошибка копирования? – Jite

+0

@Jite Я обновил правильную строку json, но все же получил ту же ошибку. – karthik

ответ

0

Данные json содержат значения типа int, но ваш класс C# содержит строковые значения.
Попробуйте изменить их в правильном типе.
Я не уверен, насколько строгий JavaScriptSerializer, но это может быть проблемой.

Также попробуйте установить «Результаты как список», может работать лучше, это приводит к тому, что результат в json представляет собой массив объектов, а не коллекцию объектов с ключом.

Как:

class templateResponse 
{ 
    public int multicast_id; 
    public int success; 
    public int failure; 
    public int canonical_ids; 
    public List<Result> results 
} 
public class Result 
{ 
    public string message_id; 
    public string registration_id; 
    public string error; 
} 
+0

У меня такая же ошибка, когда я изменил свои типы. – karthik

+0

Перечитайте свой код, отредактируйте мой ответ, проверьте снова в мин. – Jite

+0

Да, я уже пробовал использовать список, но я не хочу использовать список в типе. – karthik

0

Я попробовал вашу строку JSON для десериализации с помощью Newtonsoft.Json и succedded дает следующий вывод

string json = "{\"multicast_id\":7400896764380883211,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1351777805148960%39895cf0f9fd7ecd\"}]}"; 
    var expectedresult = JsonConvert.DeserializeObject(json); 

ВЫВОД:

{ 
    "multicast_id":7400896764380883211, 
    "success":1, 
    "failure":0, 
    "canonical_ids":0, 
    "results":[ 
     { 
     "message_id":"0:1351777805148960%39895cf0f9fd7ecd" 
     } 
    ] 
} 

для получения дополнительной информации посетите http://james.newtonking.com/json

+0

Как разобрать этот json с помощью JavascriptSerializer. Я не хочу использовать какой-либо другой сторонний элемент управления. – karthik

+0

Я пробовал использовать 'JavascriptSerializer', и это удалось только с изменением вместо' public Результаты результатов' я использую 'public List results' – Nilesh

0

Причина, по которой это не удается, заключается в том, что вы публикуете сбор результатов. Встроенный сериализатор не может обрабатывать свойства, унаследованные от общего списка. Не спрашивайте меня, почему, но я где-то читал, что вы не должны выставлять классы, унаследованные от List, это не предназначено для этого.

Я сделал (довольно уродливое) обходное решение, где я применил собственный JavaScriptConverter для обработки моего объекта. В основном вы унаследовали от System.Web.Script.Serialization.JavaScriptConverter, реализовать абстрактные классы, а затем добавить его в web.config:

<system.web.extensions> 
    <scripting> 
     <webServices> 
      <jsonSerialization> 
       <converters> 
        <add name="MyJsonConverter" type="corp.com.MyJsonConverter" /> 
       </converters> 
      </jsonSerialization> 
     </webServices> 
    </scripting> 
</system.web.extensions> 

Вот ссылка на официальные документы: https://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptconverter(v=vs.100).aspx

Смежные вопросы