错误描述

在一次开发中,使用了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作为配置文件注意事项的更多相关文章

  1. 二进制配置文件为什么比json等配置文件效率高

    二进制配置文件为什么比json等配置文件高效 项目中用spine做动画,spine可以导出json和二进制的动画配置文件,蛋疼的是spine官方竟然没有提供c的二进制配置解析代码,更没有提供它二进制文 ...

  2. [08]ASP.NET Core 中 launchsettings.json 启动配置文件

    ASP.NET Core launchsettings.json 启动配置文件 本文作者:梁桐铭- 微软最有价值专家(Microsoft MVP) 文章会随着版本进行更新,关注我获取最新版本 本文出自 ...

  3. 关于json.stringify的注意事项

    今天通过navigator.getCurrentPosition中的success回调,用json.stringify打印postion时,怎么打印都只是一个{}, 而打印postion.coords ...

  4. 读写JSON作配置文件

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

  5. Java 使用json 做配置文件

    概述 经常会用到通过配置文件,去配置一些参数,java里面本来是有配置文件的,但是导入很麻烦的,自从我用了json之后,从此一切配置文件都见鬼去吧. 1.下载gson解析json文件的jar包     ...

  6. python接口自动化读取json,yaml配置文件+封装requests+unittest+HTMLRunner实现全自动化

    # coding=utf-8 import json import requests class TestApi(object): """ /* @param: @ses ...

  7. mpvue打包没有app.json等配置文件的解决方法

    问题 一早上折腾了1个小时,小程序始终提示查找不到'app.json'文件.mpvue重新打包,光生成内容文件无配置文件. 解决办法 出错原因:版本问题 只需要把packpage.json里的mpvu ...

  8. JS数组转成json字符串的注意事项

    在js中常常会将一个数组转成json字符串发送给后端. 这时候在定义数组数据结构的时候需要格外注意,意味json中是有集合和对象的区别的. 集合的定义是[];对象的的定义是{}. 这时候,在创建数组时 ...

  9. golang json 读写配置文件

    package main import ( "encoding/json" "fmt" "os" ) type configuration ...

随机推荐

  1. 【D3】cluster layout

    一. 和其他D3类一样,layout 可以链式传递,使用简明的申明添加多种自定义设置. 二.API # d3.layout.cluster() Creates a new cluster layout ...

  2. react 入门教程 阮一峰老师真的是榜样

    -  转自阮一峰老师博客 React 入门实例教程   作者: 阮一峰 日期: 2015年3月31日 现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Nati ...

  3. ajax-jquery方法-初步入门01(整理)

    -----------------------------------2017.07.21写----------------------------------------- 相比较原生javascr ...

  4. 关于Django的理解

    Django的理解 Django的核心是中间件, 所有的请求和响应都会经过中间件 中间件是一个钩子框架, 它们可以介入请求的响应处理过程, 它用于在全局修改Django的输入和输出 Django有以下 ...

  5. dubbo源码分析(二):超时原理以及应用场景

    dubbo超时原理以及应用场景 *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: ...

  6. Android 原生 Intent 分享支持的那些事

    版权声明: 本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有. 每周会统一更新到这里,如果喜欢,可关注公众号获取最新文章. 未经允许,不得转载. 一.前言 对于一个 App ...

  7. 关于appcompat_v7兼容包的详细说明

    1.appcompat_v7包的由来? appcompat_v7是Google提供的向下兼容包,是针对API level 7(Android2.1)及以上版本所开发的,其作用是为了让兼容低版本API( ...

  8. vue指令v-else-if示例解析

    表示 v-if 的 "else if 块".可以链式调用. <div id="app"> <p v-if="isRender&quo ...

  9. Mysql元数据生成Hive建表语句注释脚本

    在将数据从Mysql 等其他关系型数据库 抽取到Hive 表中时,需要同步mysql表中的注释,以下脚本可以生成hive表字段注释修改语句. 注:其他关系型数据库如:oracle 可以通过相同的思路, ...

  10. 采药 NOIP 2005 普及组

    题目描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:" ...