如何在 c# 中使用 JSON 使用 foreach 序列化多个项目?
How do I serialize multiple items with foreach using JSON in c#?
我正在尝试从 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'”异常。
简单地把它改成这样:
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);
}
}
}
每组迭代创建新列表,并在内部 foreach 循环中填充此列表。
稍后,将其添加到 GroupSerObj
并序列化
我正在尝试从 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'”异常。
简单地把它改成这样:
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);
}
}
}
每组迭代创建新列表,并在内部 foreach 循环中填充此列表。
稍后,将其添加到 GroupSerObj
并序列化