• 假设有如下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 { getset; }
      06.[DataMember(Order = 1, Name = "@value")]
      07.public string value { getset; }
      08.[DataMember(Order = 2, Name = "$p")]
      09.public string _p { getset; }
      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 { getset; }
      38.[DataMember(Order = 1, Name = "@value")]
      39.public string value { getset; }
      40.[DataMember(Order = 2, Name = "$p")]
      41.public string _p { getset; }
      42.}
      43.}

C#在Json反序列化中处理键的特殊字符的更多相关文章

  1. requests(二): json请求中固定键名顺序&消除键和值之间的空格

    继上一篇requests发送json请求的文章后,实际工作中遇到了以下2种情况. 1:服务端要求json字符串,键名的顺序固定  2.服务端对于接收到的json数据中,若key和value之间有空格, ...

  2. js 替换json对象中的键名

      js 替换json对象中的键名 CreateTime--2018年3月30日15:38:50 Author:Marydon 情景描述: 有个json数组,现在需要将json对象中的key替换掉,值 ...

  3. 修改json数据中key(键值)

    //方法一:修改JSONObject的键 public static JSONObject changeJsonObj(JSONObject jsonObj,Map<String, String ...

  4. json - 内容中需处理的特殊字符(转)

    转 http://blog.csdn.net/icewizardry/article/details/17265267 protected string RemoveIllegalCharacterF ...

  5. json包中的Marshal&Unmarshal 文档译本

    Marshal func Marshal(v interface{})([]byte, error) Marshal returns the JSON encoding of v. Marshal返回 ...

  6. C# json反序列化 对象中嵌套数组 (转载) 可能会导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。

    C# json反序列化 对象中嵌套数组 (转载)   看图: 这里可以看到是二层嵌套!!使用C#如何实现?? 思路:使用list集合实现 → 建立类 → list集合 → 微软的   Newtonso ...

  7. c# 通过json.net中的JsonConverter进行自定义序列化与反序列化

    https://www.cnblogs.com/yijiayi/p/10051284.html 相信大家在工作中会经常遇见对json进行序列化与反序列化吧,但通常的序列化与反序列化中的json结构与c ...

  8. 利用FastJson,拼接复杂嵌套json数据&&直接从json字符串中(不依赖实体类)解析出键值对

    1.拼接复杂嵌套json FastJson工具包中有两主要的类: JSONObject和JSONArray ,前者表示json对象,后者表示json数组.他们两者都能添加Object类型的对象,但是J ...

  9. for in 循环获取json中的键(key)与值(value)

    一 .for in 循环 1.获取json中的键(key)与值(value): var data = {name:'张三',age:'20岁',sex:'男'}; for (var a in data ...

随机推荐

  1. hbase checkandput

    HBaseEveryDay_Atomic_compare_and_set Updated Sep 29, 2011 by lurker.h...@gmail.com 基本概念 在HBase中Inser ...

  2. C#之委托(函数参数传递)【转】

    原文:http://blog.csdn.net/wangdan199112/article/details/18796527 在学委托这块儿的时候,函数参数这块不是很理解,于是针对一个例子做了深入的理 ...

  3. How to solve java.net.SocketTimeoutException:60000millis problem in HDFS

    Many HDFS users encounter the following error when DFSClient ready file from a certain Data Node.  & ...

  4. 登录SQL注入

    在登录页面的账号密码的输入框中分别输入,这个值:1' or '1'='1 一,验证的数据库语句,讲传人的值组合成数据库语句: public DataTable CheckLogin(string na ...

  5. 2016WHD.china世界云计算日·北京站即将召开

    WHD.china自进驻中国以来,已在上海.北京成功举办多届,2015年于北京举办的会议更是盛况空前,注册参会者逾800人次,汇聚了国内外众多知名云服务商.IDC商.电子商务企业.电信运营商.ISP等 ...

  6. Effective JavaScript :第六章

    1.将undefined看成没有值 产生undefined的情况: ①未赋值的变量的初始值为undefined. var x ; X ; //undefined ②访问对象中不存在的属性也会产生und ...

  7. 浙大 pat 1023题解

    1023. Have Fun with Numbers (20) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue ...

  8. git config and options core.bare hard

    In Lynda course Building a Web Interface with React.js 003 Using the exercises > git clone --bare ...

  9. Dot Product

    These are vectors: They can be multiplied using the "Dot Product" (also see Cross Product) ...

  10. digitalocean vpn安装配置教程

    digitalocean是美国一家专业的vps提供商,优势是性价比高,最低配置512MB内存vps每月只要5美元,导致大陆用户疯狂涌入.关于digitalocean申请方法.digitalocean速 ...