Json作为配置文件注意事项
错误描述
在一次开发中,使用了JSON数据作为配置文件,但反序列化时总是出错,开始还以为是转义字符的问题,因为存了一个绝对路径(D:\xx\xx.json),后来测试发现竟然发现是类嵌套的问题。
解决方法
在JSON反序列化时,如果存在嵌套类,需要把嵌套的类写到包裹类里面去,并且在反序列化时传入包裹类的类型。
JSON配置文件类代码
public class SettingsHelper
{ private static string path = "settings.json";
/// <summary>
/// 读取配置
/// </summary>
/// <returns></returns>
public static Settings ReadSettings()
{
Settings settings = new Settings();
if (File.Exists(path))
{
string buffer = System.IO.File.ReadAllText(path);
settings = (Settings)JsonHelper.Deserialize(buffer,typeof(Settings));
}
return settings;
}
/// <summary>
/// 保存配置
/// </summary>
/// <param name="settings"></param>
public static void WriteSettings(Settings settings)
{
string buffer = JsonHelper.Serialize(settings);
System.IO.File.WriteAllText(path, buffer);
} }
[Serializable]
public class Settings
{
/// <summary>
/// 时间间隔
/// </summary>
public int TimeInterval { get; set; }
/// <summary>
/// 淘宝助手数据库目录
/// </summary>
public string ApptradePath { get; set; }
/// <summary>
/// 数据库服务器地址
/// </summary>
public string SqlServer { get; set; }
/// <summary>
/// 数据库账号
/// </summary>
public string SqlUid { get; set; }
/// <summary>
/// 数据库密码
/// </summary>
public string SqlPassword { get; set; }
/// <summary>
/// 数据库名称
/// </summary>
public string SqlDatabase { get; set; }
/// <summary>
/// 数据库表间映射关系集合
/// </summary>
public List<TableMaping> TableMapings { get; set; } public Settings()
{
ApptradePath = string.Empty;
SqlServer = string.Empty;
SqlUid = string.Empty;
SqlPassword = string.Empty;
SqlDatabase = string.Empty;
TableMapings = new List<TableMaping>();
} [Serializable]
public class TableMaping
{
/// <summary>
/// 源表名主键(用于删除数据)
/// </summary>
[Required(ErrorMessage="必须填写数据源表主键。")]
public string SourceTablePrimaryKey { get; set; }
/// <summary>
/// 数据源源表名称
/// </summary>
[Required(ErrorMessage = "必须填写数据源表名称。")]
public string SourceTableName { get; set; }
/// <summary>
/// 数据源表字段
/// </summary>
[Required(ErrorMessage = "必须填写数据源表字段。")]
public string SourceFields { get; set; }
/// <summary>
/// 目标数据源表名称
/// </summary>
[Required(ErrorMessage = "必须填写目标数据源表名称。")]
public string TargetTableName { get; set; }
/// <summary>
/// 目标表字段
/// </summary>
[Required(ErrorMessage = "必须填写目标表字段。")]
public string TargetFields { get; set; } public TableMaping()
{
SourceTablePrimaryKey = string.Empty;
SourceTableName = string.Empty;
SourceFields = string.Empty;
TargetFields = string.Empty;
TargetTableName = string.Empty;
}
}
}
反序列化代码
/// <summary>
/// 反序列化字符串,返回对象。
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public static object Deserialize(string json,Type type)
{
object val= JsonConvert.DeserializeObject(json,type);
return val;
}
Json作为配置文件注意事项的更多相关文章
- 二进制配置文件为什么比json等配置文件效率高
二进制配置文件为什么比json等配置文件高效 项目中用spine做动画,spine可以导出json和二进制的动画配置文件,蛋疼的是spine官方竟然没有提供c的二进制配置解析代码,更没有提供它二进制文 ...
- [08]ASP.NET Core 中 launchsettings.json 启动配置文件
ASP.NET Core launchsettings.json 启动配置文件 本文作者:梁桐铭- 微软最有价值专家(Microsoft MVP) 文章会随着版本进行更新,关注我获取最新版本 本文出自 ...
- 关于json.stringify的注意事项
今天通过navigator.getCurrentPosition中的success回调,用json.stringify打印postion时,怎么打印都只是一个{}, 而打印postion.coords ...
- 读写JSON作配置文件
个人不太喜欢XML,于是找了JSON来做配置,JSON虽然有很多引号,但这种key-value的形式,非常符合我的思维,就像是一个萝卜一个坑.最近在读写JSON文件,需要注意两个问题. 中文乱码: 直 ...
- Java 使用json 做配置文件
概述 经常会用到通过配置文件,去配置一些参数,java里面本来是有配置文件的,但是导入很麻烦的,自从我用了json之后,从此一切配置文件都见鬼去吧. 1.下载gson解析json文件的jar包 ...
- python接口自动化读取json,yaml配置文件+封装requests+unittest+HTMLRunner实现全自动化
# coding=utf-8 import json import requests class TestApi(object): """ /* @param: @ses ...
- mpvue打包没有app.json等配置文件的解决方法
问题 一早上折腾了1个小时,小程序始终提示查找不到'app.json'文件.mpvue重新打包,光生成内容文件无配置文件. 解决办法 出错原因:版本问题 只需要把packpage.json里的mpvu ...
- JS数组转成json字符串的注意事项
在js中常常会将一个数组转成json字符串发送给后端. 这时候在定义数组数据结构的时候需要格外注意,意味json中是有集合和对象的区别的. 集合的定义是[];对象的的定义是{}. 这时候,在创建数组时 ...
- golang json 读写配置文件
package main import ( "encoding/json" "fmt" "os" ) type configuration ...
随机推荐
- 解决div里面img的缝隙问题(转)
图片IMG与容器下边界之间有空隙怎么办?这里介绍3中简单的解决方法. 第一,给图片img标签display:block. img{display:block} 第二,定义容器里的字体大小为0. div ...
- 完整版百度地图点击列表定位到对应位置并有交互动画效果demo
1.前言 将地图嵌入到项目中的需求很多,好吧,我一般都是用的百度地图.那么今天就主要写一个完整的demo.展示一个列表,点击列表的任一内容,在地图上定位到该位置,并有动画效果.来来来,直接上demo ...
- MapReduce笔记——技术点汇总
目录 · 概况 · 原理 · MapReduce编程模型 · MapReduce过程 · 容错机制 · API · 概况 · WordCount示例 · Writable接口 · Mapper类 · ...
- 解决 lispbox macOS 不兼容问题
误打误撞,解决了很重要的入门级问题,简要记录下. lispbox 官网末尾说目前暂不兼容 10.4 以上系统: TODO: Compile on Mac OS X 10.4, for compatab ...
- 深入浅出数据结构C语言版(12)——从二分查找到二叉树
在很多有关数据结构和算法的书籍或文章中,作者往往是介绍完了什么是树后就直入主题的谈什么是二叉树balabala的.但我今天决定不按这个套路来.我个人觉得,一个东西或者说一种技术存在总该有一定的道理,不 ...
- javascript基础知识2#数据类型
数据类型 typeof 操作符 undefined类型 boolean类型 Nubmer类型 NaN(not a number) 数值转换parseInt,parseFloat String类型 字符 ...
- [SCOI2007]压缩 区间dp
明显是个区间dp,但是我区间dp就是个渣... f[i][j]表示区间i到j最短的字符长度:假设前面加了个M,所以初始化f[i][i]=2;当然最开始是不算M的,所以f[1][1]=1;然后就可以区间 ...
- python 集合 set
集合 set:可变集合与不可变集合 可变集合:可以向集合中添加删除元素,非可哈希的,不能用作字典的键,也不能做其他集合的元素. 把不同的元素组成一起形成集合,集合不记录元素的位置或者插入点,也就是不能 ...
- $($('.className').html( )选择器的工作原理
$($('.slot')[0]).html('<img src = "' + images[slotOne-1] + '">');
- 在Linux下更新或安装curl
问题 我这有一个项目是.net core写的,然后运行到centos机器上,刚开始发请求都能正常处理,但是时间长了,程序会报Segmentation fault,然后退出,我查了一下系统log,说的是 ...