我创建了这个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
都被替换,所以我只得到最后一次迭代的项目。如何保存字典中的所有项目?
字典不应该在下一次迭代中自动推送每个项目,而不是替换它?
答案 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);