C# 正则表达式、Json
正则表达式:
正则表达式主要的参考文章:http://www.cnblogs.com/stg609/archive/2009/06/03/1492709.html#anchorD。
需求:将cocos2dx客户端上传的Json对象转换为C#对象。
Json对象:
{"_A":, "_B":"", "__cname":"Object","_ListC":[{"_BaseA":, "_BaseB":"yes","__cname":"BaseObject"}, {"_BaseA":, "_BaseB":"no","__cname":"BaseObject"}]}
服务端不需要"__cname"属性。
转换代码:
private string AdjustInputJson(string input)
{
string pattern1 = "\"__cname\":\".*?\""; //消除cocos客户端的__cname属性
string pattern2 = @",\s?,"; //,, 转 ,
string pattern3 = @"{\s?,"; //{, 转 {
string pattern4 = @",\s?}"; //,} 转 } Regex r1 = new Regex(pattern1);
Regex r2 = new Regex(pattern2);
Regex r3 = new Regex(pattern3);
Regex r4 = new Regex(pattern4); Match m1 = r1.Match(input);
var tmpString1 = r1.Replace(input, ""); Match m2 = r2.Match(tmpString1);
var tmpString2 = r2.Replace(tmpString1, ","); Match m3 = r3.Match(tmpString2);
var tmpString3 = r3.Replace(tmpString2, "{"); Match m4 = r4.Match(tmpString3);
var tmpString4 = r4.Replace(tmpString3, "}"); return tmpString4;
}
其他代码 - 单个适配获取:
string pattern = "\"__cname\":\".*?\"";
Regex r = new Regex(pattern);
Match m = r.Match(content);
if(m.Success)
{
Console.WriteLine(m.Value);
}
其他代码 - 多个适配获取:
string pattern = "\"__cname\":\".*?\"";
var resGroup = Regex.Matches(content, pattern);
foreach(var match in resGroup)
{
Console.WriteLine(match.ToString());
}
Json转换:
C#一般用 Newtonsoft.Json。
问题在于对 List 的转换:之前一直以为要将其反序列化为 Scut 的 CacheList 的,需要手动修改 Json 串,为其增加 CacheList 的私有变量 “_List”,最后发现不用。
原因应该在于 Newtonsoft.Json 的序列/反序列化,针对的是 IList 这个基类,而 CacheList 是有继承 IList 的。
待验证噢。
推荐分享:http://www.cnblogs.com/zxx193/p/3664562.html
C# 正则表达式、Json的更多相关文章
- url解析
window.onload=function(){ var url="http://www.qq.com/index.html?key1=1&key2=2&key3=3&qu ...
- Jmeter简单回顾
之前公众号推文一上手就分享如何测接口, 其实忽略了一些概念性的东西, 今天来给大家拾遗补缺, 做个回顾吧. 一. JMeter介绍 jmeter能做什么,来自官网的解释: Ability to loa ...
- cookie和sessionStorage 、localStorage 对比
相同点:都存储在客户端 不同点:1.存储大小 cookie数据大小不能超过4k. sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或 ...
- 请描述一下 cookies,sessionStorage 和 localStorage 的区别
原文:http://blog.csdn.net/lxcao/article/details/52809939 相同点:都存储在客户端不同点: 1.存储大小 cookie数据大小不能超过4k. sess ...
- 利用正则表达式,给Json字段加引号
{ scheme: [ { query: [ [{ id: 'stdNumber', title: "标准号", compareType: 2 }], [{ id: 'CnName ...
- os常用模块,json,pickle,shelve模块,正则表达式(实现运算符分离),logging模块,配置模块,路径叠加,哈希算法
一.os常用模块 显示当前工作目录 print(os.getcwd()) 返回上一层目录 os.chdir("..") 创建文件包 os.makedirs('python2/bin ...
- python小练--使用正则表达式将json解析成dict
练习python语法,自己实现了一个简单的解析json字符,存为dict字典对象. { "id":12, "name":"jack", &q ...
- Python的正则表达式与JSON
Python的正则表达式需要导入re模块 菜鸟教程:http://www.runoob.com/python/python-reg-expressions.html 官方文档:https://docs ...
- Py修行路 python基础 (二十一)logging日志模块 json序列化 正则表达式(re)
一.日志模块 两种配置方式:1.config函数 2.logger #1.config函数 不能输出到屏幕 #2.logger对象 (获取别人的信息,需要两个数据流:文件流和屏幕流需要将数据从两个数据 ...
随机推荐
- 【Android - 框架】之OkHttp的使用
OkHttp是一个非常优秀的网络访问框架,当下非常火的Retrofit的底层就是使用OkHttp进行封装的.接下来介绍以下OkHttp的简单使用. 1.导入依赖 在Android Studio中,在M ...
- spring security +spring boot 自定义 403 页面
用的spring security 做的权限控制, 当 访问没有权限, 跳转 会跳到默认403 页面.不符合当前项目需求. 一下是解决方式: package com.ycmedia; import ...
- 在GDB 中如何记录 instruction-history and function-call-history
(EDIT: per the first answer below the current "trick" seems to be using an Atom processor. ...
- linux下sqlite3可视化工具
1.介绍:sqlite3是linux上的小巧的数据库,一个文件就是一个数据库. 2.安装:要安装sqlite3,可以在终端提示符后运行下列命令:sudo apt-get install sqlite3 ...
- 10.23 noip模拟试题
尼玛蛋pdf好难粘 直接写了 T1 /*开始写wa了 我真弱2333 关于p的排序规则不只是差值 为了字典序最小 还要拍别的*/ #include<cstdio> #include< ...
- 10.13 noip模拟试题
Porble 1时间与空间之旅(tstrip.*) 题目描述 公元22××年,宇宙中最普遍的交通工具是spaceship.spaceship的出现使得星系之间的联系变得更为紧密,所以spaceship ...
- TFS 安装与管理
整了几天TFS,把相关的一些配置与安装的要点简单记下,希望对大家有用.本篇主要是安装与配置上的内容,下一篇会介绍如何使用以及使用方面的相关心得体会. 本篇内容简要: 1. 安装部署 1.1. 流 ...
- angularJS function
angular.bootstrap 启动Angular angular.element 相当于轻量的JQuery 使用方法: angular.element('#qq'); angular.eleme ...
- 在iframe中获取iframe外的对象
parent.document.getElementById("dom ID"); $($(parent.document.getElementById("video-i ...
- exp/imp 有很多弊端
弊端1. 空表 无法执行导出操作弊端2. 高版本的导出文件 无法使用 低版本的 oracle软件 导入 环境准备:create table test0707(n1 date); 认证弊端1 案例1. ...