反序列化要添加到int的列表中的Json文件c#

时间:2014-04-26 01:55:28

标签: c# json listview serialization

我能够使用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());

知道怎么做?

1 个答案:

答案 0 :(得分:1)

除非我弄错了,否则这里的问题涉及使用JSON.NET序列化和反序列化。以下是一些很好的SO资源:

Deserializing JSON data to C# using JSON.NET

Parse JSON in C#

以下将序列化然后反序列化您拥有的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))));