• 假设有如下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. [转]查看Android源码版本

    有时候我们辛苦取到Android的源代码,想知道它的确切版本号,比如有时候我们只粗略知道拿到的是2.3的源码,但并不明确他的小版本号,这就是有时候明明都是2.3的代码可比较起来还是有差异的原因,比方说 ...

  2. CentOS 下网络报错 Device eth0 does not seem to be present

    在执行network服务重启后,出现Device eth0 does not seem to be present  问题,主要是因为系统之前有多个网卡配置,和配置文件不匹配造成的. 解决这种问题,思 ...

  3. intellij idea 12 搭建maven web项目

    原来公司一直使用eclipse,突然使用这个intellij还真有点不习惯,等用了一段时间才发现的确好用,因为也是刚开始用,所以很多不理解的地方,搭建一个项目从头好好了解下intellij 最开始的m ...

  4. JS 阻止整个网页的内容被选中

    pretty-girl { -webkit-user-select: none; } 可是!可是!不是每个浏览器都可以不忧桑!!!那就只能请脚本大王出山了. 阻止选中 有时候,我们需要禁止用户选中一些 ...

  5. js---DOM元素节点

    创建新的 HTML 元素如需向 HTML DOM 添加新元素,您必须首先创建该元素(元素节点),然后向一个已存在的元素追加该元素. 实例1: <!DOCTYPE html> <htm ...

  6. 2016中国大数据技术大会( BDTC ) 共商大数据时代发展之计

    中国大数据技术大会(BDTC)的前身是Hadoop中国云计算大会(HadoopinChina,HiC).从2008年仅60余人参加的技术沙龙发展到当下数千人的技术盛宴,目前已成为国内最具影响力.规模最 ...

  7. Token验证失败的解决方法

    Token验证失败 微信 微信公众平台开发 Token校验失败 URL Token原文 http://www.cnblogs.com/txw1958/p/token-verify.html Token ...

  8. COCOA® PROGRAMMING FOR MAC® OS X (2)- Speak Line

    1.NSControl是所有控件的父类,NSControl继承自NSView,因此NSControl是一个能够独立响应事件的NSView,每个NSControl含有一个Target和Action,当用 ...

  9. Django中url匹配规则的补充

    Django中url匹配规则是在urls.py文件中配置的. 1.关于正则匹配优先级 在url匹配列表中,如果第一条和第二条同时满足匹配规则,则优先匹配第一条. 在url匹配列表中,如果第一条为正则模 ...

  10. LeetCode OJ 40. Combination Sum II

    Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in ...