在之前写过一篇关于断点续传下载的文章,地址: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; }
}
}
希望,在以后自己用到能备查,也希望帮到更多需要的人,谢谢。