.NET在文件中存储Json数据

       在之前写过一篇关于断点续传下载的文章,地址: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; }
	}
}

希望,在以后自己用到能备查,也希望帮到更多需要的人,谢谢。

猜你喜欢

转载自blog.csdn.net/yzj_xiaoyue/article/details/80047141