我能够使用JSON序列化程序向文本文件写入对象列表,但我的目标是根据需要从json文本文件填充列表。我对如何做到这一点感到有些困惑。我根本没有JSON的经验,而且今天只是第一次玩它。
这是我用来将我的int列表写入JSON的代码。
class LockTime
{
public int Start { get; set; }
public int End {get; set; }
public LockTime (int start, int end)
{
Start = start;
End = end;
}
}
这是我写给JSON文件的课程(或者我正在编写的部分)
private List<LockTime> times;
int timeStart = pickerTimeStart.Value.Hour + pickerTimeStart.Value.Minute;
int timeEnd = pickerTimeEnd.Value.Hour + pickerTimeEnd.Value.Minute;
LockTime bla = new LockTime(timeStart, timeEnd);
times.Add(theTime);
string meh = JsonConvert.SerializeObject(times, Formatting.Indented);
File.WriteAllText(@filePath, meh);
我希望能够做两件事。第一种是从json文件填充listview。在伪代码中
用类似的东西反序列化文件 times = JsonConvert.DeserializeObject&gt;(json);
但我不能完全理解如何从文本文件直接转到数组,然后如何在列表视图中显示它。在我使用JSON之前,我正在处理一个直接的文本文件,我首先逐行绘制一堆int,然后通过lstTime.Items.AddRange(GetTimes()在列表视图中显示它们。选择(t =&gt; ; new ListViewItem(t))。ToArray());
知道怎么做?
答案 0 :(得分:1)
除非我弄错了,否则这里的问题涉及使用JSON.NET序列化和反序列化。以下是一些很好的SO资源:
Deserializing JSON data to C# using JSON.NET
以下将序列化然后反序列化您拥有的List,然后从这些对象中检索整数列表:
// Assume there is some list of LockTime objects.
List<LockTime> listOfTimes = new List<LockTime>
{
new LockTime(1, 5),
new LockTime(10, 15)
};
// Serialize this list into a JSON string.
string serializedList = JsonConvert.SerializeObject(listOfTimes, Formatting.Indented);
// You can write this out to a file like this:
//File.WriteAllText("path/to/json/file", serializedList);
// You can then read it back in, like this:
//var serializedList = File.ReadAllText("path/to/json/file")
// To get a list of integers, you can do:
List<LockTime> deserializedList = (List<LockTime>)JsonConvert.DeserializeObject(serializedList, typeof(List<LockTime>));
// Grab whatever data you want from this list to store somewhere, such as a list of all Start integers.
List<int> intList = deserializedList.Select(entry => entry.Start).ToList();
一旦将它们反序列化回内存,就可以使用LockTime对象列表执行任何操作。我缺少List View部分的细节,但是从你在OP中提供的那一行开始,我猜你可以像上面这样使用'intList':
lstTime.Items.AddRange(intList.Select(t => new ListViewItem(t.ToString(CultureInfo.InvariantCulture))));