无法在IDictionary中存储多个项目

时间:2016-04-12 16:04:40

标签: c#

我创建了这个IDictionary

IDictionary<string, string> trace = new Dictionary<string, string>();

我的目标是使用它来保存反序列化的json的内容。我将内容保存在IDictionary中,如下所示:

var obj = JsonConvert.DeserializeObject<List<RootObject>>(responseText);

foreach (var item in obj)
{
      trace["date"] = item.trace.details.date;
      trace["type"] = item.trace.details.type;
}

现在在obj变量中我有180个元素,对于obj中可用的所有项目都是foreach。问题是在每个迭代的trace字典中,每个item都被替换,所以我只得到最后一次迭代的项目。如何保存字典中的所有项目?
字典不应该在下一次迭代中自动推送每个项目,而不是替换它?

4 个答案:

答案 0 :(得分:3)

正如@Santosh指出的那样,这是预期的行为。您可以使用List<Dictionary<String,String>>

var traces = new List<Dictionary<string, string>>();    
var obj = JsonConvert.DeserializeObject<List<RootObject>>(responseText);
foreach (var item in obj)
{
      var trace = new Dictionary<String,String>();
      trace["date"] = item.trace.details.date;
      trace["type"] = item.trace.details.type;
      ...
      traces.Add(trace);
}

答案 1 :(得分:2)

尝试:

IDictionary<string, string> trace = new Dictionary<string, IList<string>>();

trace.Add("date", new List<string>())
trace.Add("type", new List<string>())

var obj = JsonConvert.DeserializeObject<List<RootObject>>(responseText);

foreach (var item in obj)
{
   trace["date"].Add(item.trace.details.date)
   trace["type"].Add(item.trace.details.type)
}

Plz,随意改进这种设计。

答案 2 :(得分:0)

使用LINQ,您可以这样做:

IEnumerable<Dictionary<string, string>>

您将获得function sub_forum_hide(){ document.getElementById("sub_forums").style.display = "none"; } 。除了使用字典集合之外,除了使用字典集合之外,做其他事情并不是一种更简单的方法。

答案 3 :(得分:0)

也许您可以使用Lookup<string, string>,这是一对多字典。您可以使用ToLookup()扩展方法创建一个:

var dates = obj.Select(o => new { Key = "date", Value = o.trace.details.date });
var types = obj.Select(o => new { Key = "type", Value = o.trace.details.type });

var lookUp = dates.Concat(types).ToLookup(kv => kv.Key, kv => kv.Value);