.NET 把对象序列化为Json字符串,再将内容写入Json文件,并且保存
在实际开发过程中,我们常常需要保存生成的Json数据。因此本文主要介绍了在.NET开发中将对象序列化成JSON字符串并将其写入文件保存至本地,希望对使用该方法的朋友有所帮助。
一、声明全局私有变量存储创建的文件夹绝对路径
/// <summary>
/// 创建的文件路径
/// </summary>
private string createPath = "";
二、创建方法函数
/// <summary>
/// 把对象序列化为Json字符串,再将内容写入Json文件,并且保存
/// </summary>
/// <param name="jsonData">需要序列化为Json字符串的对象</param>
/// <param name="filename">保存的Json文件名</param>
public void objToJsonAndWriteJsonFile(object jsonData, string filename)
{
string jsonConents = "";
string basePath = "/static/";
//在上传目录中建立日期目录
basePath += DateTime.Now.ToString("yyyy/MM/");
//以下两种方法根据需求进行选择
#region /// 1、ASP.NET Core使用
string webpath = _hostingEnv.WebRootPath;
createPath = webpath + basePath;
#endregion
#region /// 2、ASP.NET WebForm以及ASP.NET MVC使用
//basePath = "~" + basePath;
//createPath = (basePath.IndexOf("~") > -1) ? System.Web.HttpContext.Current.Server.MapPath(basePath) : basePath;
#endregion
//判断文件是否存在,不存在则直接进行文件夹的创建
if (!Directory.Exists(createPath))
{
Directory.CreateDirectory(createPath);
}
string fullPath = createPath + filename + ".json";//文件的全路径
//判断需要序列化为Json字符串的对象是否为空
if (jsonData != null)
{
//序列化为json时过滤掉NULL
JsonSerializerSettings? jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
jsonConents = JsonConvert.SerializeObject(jsonData, Formatting.Indented, jsonSetting);
}
//判断Json字符串内容是否为空
if (!string.IsNullOrEmpty(jsonConents))
{
using (FileStream fs = new FileStream(fullPath, FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite, FileShare.ReadWrite))
{
fs.Seek(0, SeekOrigin.Begin);
fs.SetLength(0);
//如果Json文件中有中文数据,可能会出现乱码的现象,那么需要加上如下代码
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
using (StreamWriter sw = new StreamWriter(fs, Encoding.UTF8))
{
sw.WriteLine(jsonConents);
}
}
}
}
三、创建的文件目录实例
下图为在.NET Core中的目录实例,在ASP.NET WebForm中则创建在项目文件的根目录中的“static”
四、实例
4.1、创建一个实例类
public class keywords
{
public List<string> IllegalKeywords { get; set; }
}
4.2、进行数据填充
#region 实例化数据类以及进行数据填充
List<keywords> keys = new List<keywords>();
keywords words = new keywords();
words.IllegalKeywords = new List<string>();
for (int i = 0; i < 5; i++)
{
string keysdata = "测试" + i;
words.IllegalKeywords.Add(keysdata);
}
keys.Add(words);
#endregion
//进行方法调用
objToJsonAndWriteJsonFile(keys, "Config_NPC");