C# C-将Json反序列化到字典

C# C-将Json反序列化到字典,c#,.net,json,C#,.net,Json,我试图将我的列表代码行转换为字典,因为据我所知,它们更快、更易于管理,就像我可以通过键值而不仅仅是索引来获取它的值一样 因此,我试图修改我的json反序列化代码,实际上是Newtonsoft的,但我不知道如何将原始json转换为我自己格式的字典 Dictionary <string,Tag> Tag类是我自己的带有成员变量的类,包含标记信息。 它肯定不包括函数 字符串应该是Tag.Name,一个字符串成员变量 //TODO: Fix "Hacky" solu

我试图将我的列表代码行转换为字典,因为据我所知,它们更快、更易于管理,就像我可以通过键值而不仅仅是索引来获取它的值一样

因此,我试图修改我的json反序列化代码,实际上是Newtonsoft的,但我不知道如何将原始json转换为我自己格式的字典

Dictionary <string,Tag>
Tag类是我自己的带有成员变量的类,包含标记信息。 它肯定不包括函数

字符串应该是Tag.Name,一个字符串成员变量

            //TODO: Fix "Hacky" solution to deserialized lines into Dictionary
            //Which means : Raw Json -> Deserialized data -> List -> Dictionary is very hacky in my perspective
            //Should be : Raw Json -> Deserialized data -> Dictionary, but i have no idea to convert directly like that

            else if (filename.Contains(".json")) // very janky method to detect json file. dont depend on file extension - rather depend on actual file format.
            {
                string line = String.Join("", Lines);

                List<Tag> lv_list = new List<Tag>();
                Dictionary<string,Tag> lv_dict = new Dictionary<string, Tag>();

                lv_list = JsonConvert.DeserializeObject<List<Tag>>(line);

                gVar.Tags.AddRange(lv_list);
                gVar.gTagCount += lv_list.Count();

                for (int i = 0; i < lv_list.Count(); ++i)
                {
                    gVar.Tags2.Add(lv_list[i].Name, lv_list[i]);
                }

                int lv_tagcount = 1;
                for (int i = 0; i < gVar.gTagCount; ++i)
                {
                    gVar.Tags[i].TagCount = lv_tagcount;
                    ++lv_tagcount;
                }

我不想麻烦直接反序列化到字典:如果JSON的格式像数组一样,那么先将其反序列化到列表中。这两个步骤的过程没有什么不妥之处

使用LINQ的ToDictionary方法从列表中获取字典:

Dictionary<string,Tag> lv_dict = JsonConvert.DeserializeObject<List<Tag>>(line)
    .ToDictionary(tag => tag.Name);

我还质疑TagCount属性是否是一个好的模式。看起来您试图让每个标记明确地知道它在集合中的位置。这是一种代码气味。也许现在您正在使用一个不必要的字典,因为您可以在字典中按标签的名称查找标签?

TagCount成员变量不像您所说的那样用于索引。我使用datagridview为用户显示这些列表/字典。我更喜欢数一数并显示它们,这就是为什么我会这样记录它们。我不熟悉您的具体情况,所以我不能像您那样判断,但似乎在标记类本身上添加行号是将责任放在错误的位置。您是否考虑过一种策略,比如让DataGridView显示行号,而不将其作为模型本身的一部分?
gVar.Tags2 = JsonConvert.DeserializeObject<List<Tag>>(line)
    .ToDictionary(tag => tag.Name);