错误描述

在一次开发中,使用了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. 【samba】samba 用户权限配置(转)

    首先要保证你的samba安装并配置好,关于安装和配置samba请参考此文章 http://blog.csdn.net/linglongwunv/archive/2010/01/19/5212875.a ...

  2. hadoop环境中误删除tmp文件夹的恢复

    情景描述: 种种原因,不小心把系统根目录中的tmp文件删除了!发现jps之后看不到 master主机上面的namenode,resourcemanager,secondarynamenode三个进程了 ...

  3. HBase(0.96以上版本)过滤器Filter详解及实例代码

    说明: 本文参考官方Ref Guide,Developer API和众多博客,并结合实测代码编写,详细总结HBase的Filter功能,并附上每类Filter的相应代码实现. 本文尽量遵从Ref Gu ...

  4. Samba服务部署

    Samba,是种用来让UNIX系列的操作系统与微软Windows操作系统的SMB/CIFS(Server Message Block/Common Internet File System)网络协议做 ...

  5. 44. leetcode 28. Implement strStr()

    28. Implement strStr() Implement strStr(). Returns the index of the first occurrence of needle in ha ...

  6. .NET 微服务和Docker容器

    .NET 微服务:适用于容器化 .NET 应用的体系结构 容器和 Docker 简介 什么是 Docker? Docker 术语 Docker 容器.映像和注册表 为 Docker 容器选择 .NET ...

  7. C# 将数据表导出到Excel通用方法

    DataGrid dg = new DataGrid(); dg.DataSource = dt; dg.DataBind(); Response.Clear(); Response.Buffer = ...

  8. 放开那个UI 妹子,让我来(上)

    一.前言 今天要学习的内容:今天主要是稍微总结一下,页面中如何用字体代替图片,省事,省时,方便,实用! 小苏啰嗦:人都是有惰性的.真的.刚开始我们有一个经验丰富的美工,加上我们关系又非常好,以至于每次 ...

  9. [SDOI2011]染色 线段树+树链剖分

    考试一共四个半小时,光这道题就打了三个小时..然后又改了俩小时才过.我太蒟蒻了. 其实数据结构这种题就看第一遍打没打顺,顺了就A了,要是再找错再改就慢了,而且样例过了不能说明任何问题(虽然考试的时候我 ...

  10. golang 的 http cookie 用法

    golang的http cookie用法 在服务端程序开发的过程中,cookie经常被用于验证用户登录.golang 的 net/http 包中自带 http cookie的定义,下面就来讲一下coo ...