如何在 c# 中使用 JSON 使用 foreach 序列化多个项目?

Posted

技术标签:

【中文标题】如何在 c# 中使用 JSON 使用 foreach 序列化多个项目?【英文标题】:How do I serialize multiple items with foreach using JSON in c#? 【发布时间】:2021-07-28 15:24:40 【问题描述】:

我正在尝试从 2 个 ListView 序列化对象,ListView#2 用于显示分组的对象,而 ListView#2 显示所述组。 (在#1 中选择一个组会在#2 中显示不同的对象集)

        JsonSerializer serializer = new JsonSerializer();
        using (StreamWriter sw = new StreamWriter(path + "\\data.txt"))
        
            foreach (ListViewItem group in lV_groups.Items)
            
                foreach (ListViewItem item in lV_items.Items)
                
                    List<ItemSerObj> itemsObj = new List<ItemSerObj>()
                    
                        new ItemSerObj
                        
                            ItemName = item.SubItems[0].Text,
                            Value = item.SubItems[1].Text,
                            Quality = item.SubItems[2].Text,
                            TimeStamp = item.SubItems[3].Text
                        
                    ;

                    GroupSerObj serializeGroup = new GroupSerObj
                    
                        GroupName = group.SubItems[0].Text,
                        UpdateRate = group.SubItems[1].Text,
                        Active = group.SubItems[2].Text,
                        Items = itemsObj

                    ;


                    using (JsonWriter writer = new JsonTextWriter(sw))
                    
                        serializer.Serialize(writer, serializeGroup); //Where exception occurs.
                    
                
            
        

我收到“System.ObjectDisposedException: 'Cannot write to a closed TextWriter'”异常。

【问题讨论】:

【参考方案1】:

只需将其更改为以下内容:

JsonSerializer serializer = new JsonSerializer();
using (StreamWriter sw = new StreamWriter(path + "\\data.txt"))

    using (JsonWriter writer = new JsonTextWriter(sw))
    
        foreach (ListViewItem group in lV_groups.Items)
        
            List<ItemSerObj> itemsObj = new List<ItemSerObj>();

            foreach (ListViewItem item in lV_items.Items)
            
                itemsObj.Add(
                new ItemSerObj
                
                    ItemName = item.SubItems[0].Text,
                    Value = item.SubItems[1].Text,
                    Quality = item.SubItems[2].Text,
                    TimeStamp = item.SubItems[3].Text
                );           
            

            GroupSerObj serializeGroup = new GroupSerObj
            
                GroupName = group.SubItems[0].Text,
                UpdateRate = group.SubItems[1].Text,
                Active = group.SubItems[2].Text,
                Items = itemsObj
            ;

            serializer.Serialize(writer, serializeGroup);
        
    

每组迭代创建一个新的List,这个列表被填充到内部foreach循环中。稍后,它被添加到GroupSerObj并被序列化

【讨论】:

我不断收到“无法写入已关闭的 TextWriter”异常。和我在自己的代码中所做的一样。

以上是关于如何在 c# 中使用 JSON 使用 foreach 序列化多个项目?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 在 POST 请求中发送 json 请求正文数据

C#实现迭代器

如何在 C# 中使用嵌套的 json 对象

C#如何实现进程单例运行

如何在 c# 中使用 JSON 使用 foreach 序列化多个项目?

如何在 C# 中使用 JSON 反序列化 oData V2?