在之前写过一篇关于断点续传下载的文章,地址:https://blog.csdn.net/yzj_xiaoyue/article/details/80023655,之后想在文件中记录已下载的内容,如果在网络中断的情况下可以根据配置文件来继续下载,在经理的提示下使用了Json数据存在在文件中,通过了解json.net的Newtonsoft.Json来对数据进行系列化存储。
经过整合和修改,自己写了一个Json的帮助类,直接上代码:
using Newtonsoft.Json; using Newtonsoft.Json.Converters; using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DownloadTaskDemo { class JsonHelper { /// <summary> /// 通过文件路径获取json文件中的内容 /// </summary> /// <param name="cfgFilePath">配置文件存储路径</param> /// <returns></returns> public static ConfigureModel ReadJson(string cfgFilePath) { ConfigureModel cfgModel = new ConfigureModel(); //序列化 string cfgSerializer = JsonConvert.SerializeObject(cfgModel); //反序列化 ConfigureModel debc1 = JsonConvert.DeserializeObject<ConfigureModel>(cfgSerializer); if (!File.Exists(cfgFilePath)) { File.Create(cfgFilePath); } //读取json文件 using (StreamReader sr = new StreamReader(cfgFilePath)) { try { JsonSerializer serializer = new JsonSerializer(); serializer.Converters.Add(new JavaScriptDateTimeConverter()); serializer.NullValueHandling = NullValueHandling.Ignore; //构建Json.net的读取流 JsonReader reader = new JsonTextReader(sr); //对读取出的Json.net的reader流进行反序列化,并装载到模型中 cfgModel = serializer.Deserialize<ConfigureModel>(reader); return cfgModel; } catch (Exception ex) { ex.Message.ToString(); } } return null; } /// <summary> /// 写Json数据到Json文件中 /// </summary> /// <param name="cfgFilePath">配置文件的路径</param> /// <param name="cfgModel">配置类对象</param> /// <returns></returns> public static bool WriteJson(string cfgFilePath, ConfigureModel cfgModel) { //判断文件是否存在 if (!File.Exists(cfgFilePath)) { File.Create(cfgFilePath); } //把模型数据写到文件 using (StreamWriter sw = new StreamWriter(cfgFilePath)) { try { JsonSerializer serializer = new JsonSerializer(); serializer.Converters.Add(new JavaScriptDateTimeConverter()); serializer.NullValueHandling = NullValueHandling.Ignore; //构建Json.net的写入流 JsonWriter writer = new JsonTextWriter(sw); //把模型数据序列化并写入Json.net的JsonWriter流中 serializer.Serialize(writer, cfgModel); //ser.Serialize(writer, ht); writer.Close(); sw.Close(); return true; } catch (Exception ex) { ex.Message.ToString(); } } return false; } } }
上述代码中使用到一个自定义的类如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DownloadTaskDemo { class ConfigureModel { //文件名 public string FileName { get; set; } //MD5 public string MD5 { get; set; } //文件来源 public string FileUrl { get; set; } //已下载内容 public long Position { get; set; } //文件总大小 public long FileLength { get; set; } //是否下载完成 public bool IsDownload { get; set; } //文件创建时间 public DateTime CreateDate { get; set; } } }
希望,在以后自己用到能备查,也希望帮到更多需要的人,谢谢。