C#在Json反序列化中处理键的特殊字符
- 假设有如下Json 数据: - 1.- {- 2.- "id"- : 1,- 3.- "@value"- :- "this a @"- ,- 4.- "$p"- :- "my name a $"- 5.- }- 通常情况下,在Json反序列化时,将Json映射到序列化的类,无需指定其名称。如 - 1.- public- JsonTest{- 2.- public- string- id{- get- ;- set- ;}- 3.- }在反序列化时会自动将Json中的ID与类中的ID对应。但是当键有特殊字符时,如 $ , @ 等,无法定义类的属性中含有特殊字符,因此,需要使用 [DataContract] 和 [DataMember] 来定义数据协定。- 01.- [DataContract]- 02.- public- class- jtest- 03.- {- 04.- [DataMember(Order = 0)]- 05.- public- int- id {- get- ;- set- ; }- 06.- [DataMember(Order = 1, Name =- "@value"- )]- 07.- public- string- value {- get- ;- set- ; }- 08.- [DataMember(Order = 2, Name =- "$p"- )]- 09.- public- string- _p {- get- ;- set- ; }- 10.- }反序列化- 1.- jtest test = serializer.ReadObject(- new- MemoryStream(Encoding.UTF8.GetBytes(jsonStr)))- as- jtest;- 2.- Console.WriteLine( test.value );- 序列化 - 1.- var stream =- new- MemoryStream();- 2.- serializer.WriteObject(stream, test);- 3.- byte- [] dataBytes =- new- byte- [stream.Length];- 4.- stream.Position = 0;- 5.- stream.Read(dataBytes, 0, (- int- )stream.Length);- 6.- string- dataString = Encoding.UTF8.GetString(dataBytes);完整测试类:- 01.- using- System;- 02.- using- System.Text;- 03.- using- System.Runtime.Serialization;- 04.- using- System.Runtime.Serialization.Json;- 05.- using- System.IO;- 06.- 07.- 08.- namespace- ConsoleApplication1- 09.- {- 10.- class- Program- 11.- {- 12.- static- void- Main(- string- [] args)- 13.- {- 14.- string- jsonStr =- "{\"id\":1,\"@value\":\"this a @\",\"$p\":\"my name a $\"}"- ;- 15.- DataContractJsonSerializer serializer =- new- DataContractJsonSerializer(- typeof- (jtest));- 16.- 17.- //反序列化- 18.- jtest test = serializer.ReadObject(- new- MemoryStream(Encoding.UTF8.GetBytes(jsonStr)))- as- jtest;- 19.- Console.WriteLine( test.value );- 20.- 21.- //序列化- 22.- var stream =- new- MemoryStream();- 23.- serializer.WriteObject(stream, test);- 24.- byte- [] dataBytes =- new- byte- [stream.Length];- 25.- stream.Position = 0;- 26.- stream.Read(dataBytes, 0, (- int- )stream.Length);- 27.- string- dataString = Encoding.UTF8.GetString(dataBytes);- 28.- 29.- Console.WriteLine(dataString);- 30.- Console.ReadKey();- 31.- }- 32.- }- 33.- [DataContract]- 34.- public- class- jtest- 35.- {- 36.- [DataMember(Order = 0)]- 37.- public- int- id {- get- ;- set- ; }- 38.- [DataMember(Order = 1, Name =- "@value"- )]- 39.- public- string- value {- get- ;- set- ; }- 40.- [DataMember(Order = 2, Name =- "$p"- )]- 41.- public- string- _p {- get- ;- set- ; }- 42.- }- 43.- }
C#在Json反序列化中处理键的特殊字符的更多相关文章
- requests(二): json请求中固定键名顺序&消除键和值之间的空格
		继上一篇requests发送json请求的文章后,实际工作中遇到了以下2种情况. 1:服务端要求json字符串,键名的顺序固定 2.服务端对于接收到的json数据中,若key和value之间有空格, ... 
- js 替换json对象中的键名
		js 替换json对象中的键名 CreateTime--2018年3月30日15:38:50 Author:Marydon 情景描述: 有个json数组,现在需要将json对象中的key替换掉,值 ... 
- 修改json数据中key(键值)
		//方法一:修改JSONObject的键 public static JSONObject changeJsonObj(JSONObject jsonObj,Map<String, String ... 
- json - 内容中需处理的特殊字符(转)
		转 http://blog.csdn.net/icewizardry/article/details/17265267 protected string RemoveIllegalCharacterF ... 
- json包中的Marshal&Unmarshal 文档译本
		Marshal func Marshal(v interface{})([]byte, error) Marshal returns the JSON encoding of v. Marshal返回 ... 
- C# json反序列化 对象中嵌套数组 (转载)   可能会导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。
		C# json反序列化 对象中嵌套数组 (转载) 看图: 这里可以看到是二层嵌套!!使用C#如何实现?? 思路:使用list集合实现 → 建立类 → list集合 → 微软的 Newtonso ... 
- c# 通过json.net中的JsonConverter进行自定义序列化与反序列化
		https://www.cnblogs.com/yijiayi/p/10051284.html 相信大家在工作中会经常遇见对json进行序列化与反序列化吧,但通常的序列化与反序列化中的json结构与c ... 
- 利用FastJson,拼接复杂嵌套json数据&&直接从json字符串中(不依赖实体类)解析出键值对
		1.拼接复杂嵌套json FastJson工具包中有两主要的类: JSONObject和JSONArray ,前者表示json对象,后者表示json数组.他们两者都能添加Object类型的对象,但是J ... 
- for in 循环获取json中的键(key)与值(value)
		一 .for in 循环 1.获取json中的键(key)与值(value): var data = {name:'张三',age:'20岁',sex:'男'}; for (var a in data ... 
随机推荐
- 忘记linux用户名和密码怎么解决?
			开机进入单用户模式,可跳过密码验证修改root密码. 具体步骤如下: 开机读秒时键盘上按回车 通过操纵键盘上下方向键选择系统版本,然后按下E 通过操纵键盘上下方向键选择kernel所在行,再次按下E进 ... 
- JavaBean 反射机制实现自动配置数据
			声明:该版本是没完成的.该博文只做记录代码用 String memberType(String name) throws Exception { return getType(getClass().g ... 
- const形参与非const形参
			在程序设计中我们会经常调用函数,调用函数就会涉及参数的问题,那么在形参列表中const形参与非const形参对传递过来的实参有什么要求呢? 先来看一个简单的例子: #include <iostr ... 
- Java 泛型 泛型的约束与局限性
			Java 泛型 泛型的约束与局限性 @author ixenos 不能用基本类型实例化类型参数 不能用类型参数代替基本类型:例如,没有Pair<double>,只有Pair<Doub ... 
- hdu_5036_Explosion(bitset优化传递闭包)
			题目链接:hdu_5036_Explosion 题意: 一个人要打开或者用炸弹砸开所有的门,每个门里面有一些钥匙,一个钥匙对应一个门,有了一个门的钥匙就能打开相应的门,告诉每个门里面有哪些门的钥匙,问 ... 
- csu oj Infected Computer 1427
			#include <iostream> #include <algorithm> #include <stdio.h> #define max 20005 #def ... 
- Django中的ORM
			Django中ORM的使用. 一.安装python连接mysql的模块:MySQL-python sudo pip install MySQL-python 安装完成后在python-shell中测试 ... 
- css-文本垂直居中(转)
			css-文本垂直居中(转) 在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在 ... 
- Vultr免费vps注册和使用简易教程
			如果你是站长,寻找托管网站的主机,或者是开发者,需要搭建服务器环境,选购vps是必须的.强烈不推荐国内的vps产品,没有性价比,维护水平又烂,甚至某些国内所谓云主机vps安装后门,监控你的数据.海外v ... 
- USB 设备插拔事件处理
			Windows 系统下,设备连接至电脑或从电脑移除,系统会广播一条 WM_DEVICECHANGE 消息到所有应用程序,在程序的消息处理函数中可以对事件进行相应. 1: class C ... 
