2015-11-02 4 views
1

Я создал список List<Dictionary<string, Dictionary<string,string>>>, и я пытаюсь добавить значение в этот список. PFB код для этого.Ошибка: получение ошибки при добавлении значения в список коллекции

public string Get(Hello request) 
{ 
    string html= "[{'Id':1},{'Id':2}]"; 
    List<Dictionary<string, Dictionary<string,string>>> lsData = null; 
    var values = JsonConvert.DeserializeObject<List<object>>(html); //parse json Array 

for (int i = 0; i < values.Count; i++) // loop one element on json array and parse it. 
{ 
    var obj = values[i]; 
    Dictionary<string, string> data = JsonConvert.DeserializeObject<Dictionary<string, string>>(obj.ToString()); 
    lsData.Add(i, data); //Showing error here 
} 
return "success"; 
} 

, но этот код показывает ошибку ниже. The type arguments for method 'ServiceStack.ServiceRoute Extensions.Add<T>(ServiceStack.Web.IService Routes, strong, ServiceStack.ApplyTo, params System.Linq.Expressions.Expression<System.Func<T,object>>[])' cannot be inferred from the usage. Try specifying the type arguments explicitly.

Я не понимаю, почему он показывает ошибку. заранее спасибо.

+0

Умм вы уверены, что должны работать вообще? Из того, что я вижу, вы deserialize json, который в порядке. Но ТОГДА вы снова десериализуете его? (ака десериализация чего-то десериализованного) – Thomas

+1

Выполняет ли это компиляцию lsData.Add (i, data), вам нужен объект Dictionary для списка, он не может быть ключевым значением напрямую, перегрузка списка не будет предоставлять эту функцию до тех пор, пока не будет расширение создано –

ответ

2

Выпуск находится в этой строке lsData.Add(i, data);, так как вы пытаетесь добавить Dictionary<string, Dictionary<string,string>> к данному списку, теперь требуется две вещи:

  1. Инициализирован Dictionary<string,string>, который вы делаете, действуя по следующей линии:

    Dictionary<string, string> data = JsonConvert.DeserializeObject<Dictionary<string, string>>(obj.ToString()); 
    

Предполагая Deserialization работает правильно, но когда вы делаете вызов для списка того, его ошибочное, так как его, как добавление значения в Dictionary, а не к List, поэтому сделать следующие изменения:

Добавьте следующий код в течение цикла:

var lsDataDictionary = new Dictionary<string, Dictionary<string,string>>(); 
lsDataDictionary.Add(i.ToString(),data) 
lsData.Add(lsDataDictionary); 

Пожалуйста, обратите внимание на lsDataDictionary ключ строки, в for loop counter должны быть преобразованы в string

+0

Для уточнения: что касается десериализации, то ошибка возникает не потому, что он десериализует одну и ту же структуру 2 раза, а потому, что он пытается десериализоваться в словаре вместо списка? – Thomas

+0

Почему десериализация в словаре проблема, которая будет работать из коробки, у него есть словарь внутри объекта, его нельзя десериализовать в список –

+0

Я не был слишком уверен в описании, что вы имели в виду, а просто получил его вы имели в виду добавление себя не десериализацией, которую он сделал. – Thomas

0

Вам нужно создать экземпляр программным обеспечением LSdata

lsData = new List<Dictionary<string, Dictionary<string,string>>>(); 
+0

Я тоже это сделал, но все еще демонстрирует ту же ошибку. – chirag

+0

Какая ошибка? – ehh

+0

О, только что увидел, извините. В любом случае вы должны создать экземпляр, и я не вижу его в коде, который вы отправили – ehh

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