错误描述

在一次开发中,使用了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. CSS3新增文本属性实现图片点击切换效果

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 排座椅 2008 NOIP 普及组 第二题

    题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接耳.同学 ...

  3. layer弹出层详解

    前言:学习layer弹出框,之前项目是用bootstrap模态框,后来改用layer弹出框,在文章的后面,我会分享项目的一些代码(我自己写的). layer至今仍作为layui的代表作,她的受众广泛并 ...

  4. 《STL源码剖析》相关面试题总结

    原文链接:http://www.cnblogs.com/raichen/p/5817158.html 一.STL简介 STL提供六大组件,彼此可以组合套用: 容器容器就是各种数据结构,我就不多说,看看 ...

  5. msbuildtoolspath is not specified for the toolsversion xx

    本地先是安装的vs2015,由于项目需求又安装了vs2008,在用vs2008打开.csproj工程文件,出现了上图的错误. 这一般是由于安装了vs2015和vs2008冲突产生的问题. 解决方案: ...

  6. Python学习笔记2:构造序列:列表推导和生成器表达式

    欢迎访问个人网站:www.comingnext.cn 1. 关于Python内置序列类型 a. 按能否存放不同类型的数据区分 容器序列: list.tuple 和collections.deque这些 ...

  7. mysql-索引与优化

    写在前面:索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点.考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存储100条记录.如果没有索引,查询将 ...

  8. How to make a simplest WCF service work on Win7 with VS2010

    You know as a beginner to learn WCF, the first thing is to make a simplest WCF service work like a c ...

  9. 第3天:CSS浮动、定位、表格、表单总结

    今天学的是浮动.定位.表格.表单等内容,这些是CSS中最容易混淆的知识,有许多小技巧在写代码过程中需要注意.下面是主要知识点: 一.float浮动1.块元素在一行显示2.内联元素支持宽高3.默认内容撑 ...

  10. JavaWeb(五)Filter过滤器

    Filter过滤器 Fileter介绍 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Serv ...