个人不太喜欢XML,于是找了JSON来做配置,JSON虽然有很多引号,但这种key-value的形式,非常符合我的思维,就像是一个萝卜一个坑。最近在读写JSON文件,需要注意两个问题。

中文乱码:

直接像读txt一样,读取json文件

//最初的写法
File.ReadAllText(jsonPath);
//防止中文乱码
File.ReadAllText(jsonPath,Encoding.Default);

写入格式:

将json转成字符串写入json文件时,发现没有任何换行、空格、Tab,特别不利于查看,尤其是当数据比较多、分级多较复杂的时候

所以,在写入之前,应当作一下小小的处理,效果如下:

格式化JSON示例:

/// <summary>
/// 格式化JSON字符串
/// </summary>
/// <param name="str">输入字符串</param>
/// <returns>输出字符串</returns>
public static string FormatJsonStr(string str)
{
JsonSerializer serializer = new JsonSerializer();
TextReader tr = new StringReader(str);
JsonTextReader jtr = new JsonTextReader(tr);
object obj = serializer.Deserialize(jtr);
if (obj != null)
{
StringWriter textWriter = new StringWriter();
JsonTextWriter jsonWriter = new JsonTextWriter(textWriter)
{
Formatting = Formatting.Indented,
Indentation = ,
IndentChar = ' '
};
serializer.Serialize(jsonWriter, obj);
return textWriter.ToString();
}
else
{
return str;
}
}

读写JSON示例:

/// <summary>
/// 读取JSON文件
/// </summary>
/// <param name="jsonPath">json文件路径</param>
/// <returns>json字符串</returns>
public static string ReadJsonString(string jsonPath)
{
if (!File.Exists(jsonPath))
{
LogHelper.Error("配置文件不存在:"+ jsonPath);
return string.Empty;
}
return File.ReadAllText(jsonPath,Encoding.Default);
} /// <summary>
///读取JSON文件
/// </summary>
/// <param name="jsonPath">json文件路径</param>
/// <returns>JObject对象</returns>
public static JObject ReadJsonObj(string jsonPath)
{
string json = ReadJsonString(jsonPath);
JObject jsonObj = null;
if (!string.IsNullOrEmpty(json))
{
jsonObj=(JObject)JsonConvert.DeserializeObject(json);
}
return jsonObj;
} #region 写入JSON
/// <summary>
/// 写入JSON
/// </summary>
/// <returns></returns>
public static bool Write(string jsonStr,string jsonPath)
{
try
{
System.IO.File.WriteAllText(jsonPath, jsonStr, Encoding.Default);
return true;
}
catch (System.Exception ex)
{
LogHelper.Error("保存结果异常" + ex.Message + ex.StackTrace);
return false;
} }
#endregion

http://www.cnblogs.com/liweis/p/6408967.html

最新文章

  1. Ubuntu gcc编译报错:format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 2 has type ‘__time_t’ [-Wformat=]
  2. “无法更新EntitySet“*****”,因为它有一个DefiningQuery,而元素中没有支持当前操作的元素”问题的解决方法
  3. Hibernate的性能优化问题笔记
  4. Bootstrap_分页
  5. 添加数据源,管理工具--数据源(ODBC),点击添加不显示该驱动
  6. MATLAB中的nargin与varargin的用法
  7. 《OD大数据实战》MapReduce实战
  8. [Leetcode][Python]21: Merge Two Sorted Lists
  9. php常用数据结构
  10. Python机器学习实践:决策树判别汽车金融违约用户
  11. django-rest-framework配置json web token
  12. C#委托(转载)
  13. C#异步编程のParallel(并行)
  14. 给大厨写的R数据分析代码
  15. C# Aspose.Cells方式导入Excel文件
  16. Python特点
  17. 富文本编辑器 CKeditor 配置使用
  18. tomcat支持https的历程
  19. Django objects.all() ,objects.get() ,objects.filter()之间的区别
  20. linux tar gzip 命令用法

热门文章

  1. linux 目录结构+常用命令+压缩命令+vim使用+及基础知识
  2. c# 测试方法执行时间
  3. redis配置详细解析
  4. Python中文分词 jieba
  5. Maven 映像
  6. windows端口查看及进程查找
  7. Beta阶段——Scrum 冲刺博客第二天
  8. C#中解决Response.AddHeader(&quot;Content-Disposition&quot;, &quot;attachment; filename=&quot; + filename)下载文件时文件名乱码的问题
  9. insert into 语句的三种写法
  10. 【转】MyBatis接口的简单实现原理