C#在Json反序列化中处理键的特殊字符
2012-03-27 14:01
573 查看
假设有如下Json 数据:
通常情况下,在Json反序列化时,将Json映射到序列化的类,无需指定其名称。如
在反序列化时会自动将Json中的ID与类中的ID对应。
但是当键有特殊字符时,如 $ , @ 等,无法定义类的属性中含有特殊字符,
因此,需要使用 [DataContract] 和 [DataMember] 来定义数据协定。
反序列化
序列化
完整测试类:
{ "id" : 1, "@value" : "this a @", "$p" : "my name a $" }
通常情况下,在Json反序列化时,将Json映射到序列化的类,无需指定其名称。如
public JsonTest{ public string id{get;set;} }
在反序列化时会自动将Json中的ID与类中的ID对应。
但是当键有特殊字符时,如 $ , @ 等,无法定义类的属性中含有特殊字符,
因此,需要使用 [DataContract] 和 [DataMember] 来定义数据协定。
[DataContract] public class jtest { [DataMember(Order = 0)] public int id { get; set; } [DataMember(Order = 1, Name = "@value")] public string value { get; set; } [DataMember(Order = 2, Name = "$p")] public string _p { get; set; } }
反序列化
jtest test = serializer.ReadObject(new MemoryStream(Encoding.UTF8.GetBytes(jsonStr))) as jtest; Console.WriteLine( test.value );
序列化
var stream = new MemoryStream(); serializer.WriteObject(stream, test); byte[] dataBytes = new byte[stream.Length]; stream.Position = 0; stream.Read(dataBytes, 0, (int)stream.Length); string dataString = Encoding.UTF8.GetString(dataBytes);
完整测试类:
using System; using System.Text; using System.Runtime.Serialization; using System.Runtime.Serialization.Json; using System.IO; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { string jsonStr = "{\"id\":1,\"@value\":\"this a @\",\"$p\":\"my name a $\"}"; DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(jtest)); //反序列化 jtest test = serializer.ReadObject(new MemoryStream(Encoding.UTF8.GetBytes(jsonStr))) as jtest; Console.WriteLine( test.value ); //序列化 var stream = new MemoryStream(); serializer.WriteObject(stream, test); byte[] dataBytes = new byte[stream.Length]; stream.Position = 0; stream.Read(dataBytes, 0, (int)stream.Length); string dataString = Encoding.UTF8.GetString(dataBytes); Console.WriteLine(dataString); Console.ReadKey(); } } [DataContract] public class jtest { [DataMember(Order = 0)] public int id { get; set; } [DataMember(Order = 1, Name = "@value")] public string value { get; set; } [DataMember(Order = 2, Name = "$p")] public string _p { get; set; } } }
相关文章推荐
- C#在Json反序列化中处理键的特殊字符
- C# winform端 通过HttpWebRequest进行post和get请求,数据格式为json,后台java端接收,其中有关传输特殊字符(\t,\r,',\n,n)等处理
- C#: json字符串中的特殊字符处理
- C#: json字符串中的特殊字符处理
- C#中 如何处理 JSON中的特殊字符
- 如何处理JSON中的特殊字符
- c# Json 自定义类作为字典键时,序列化和反序列化的处理方法
- java 中JSON数据特殊字符的处理
- c#序列化json字符串及处理
- 前台js escape及后台C# Server.UrlEncode 对QueryString传参的含~!@#$%^&*等特殊字符的处理 通常情况下,我们在List列表页面,会包含Create,Edit
- PHP json字符串对特殊字符处理(单引号,双引号)
- C#对实体进行JSON序列化时枚举的处理
- 如何处理JSON中的特殊字符
- Java JSON格式特殊字符处理
- 实用记录.NET处理json数据中单引号和特殊字符串
- Json特殊字符处理
- JSON特殊字符的处理
- Net中JSON序列化和反序列化处理(日期时间特殊处理)
- json文件中的特殊字符处理,放置json数据读取产生错误
- json中对特殊字符的处理