string mejson = "{\"id\":1234,\"uname\":\"北\\京\"}"; Test t = Activator.CreateInstance<Test>(); using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(mejson))) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(t.GetType()); Test t1 = (Test)serializer.ReadObject(ms); } return;
反序列化对象 属于类型 ConsoleApplication11.Test 时出现错误。遇到意外字符“ä”。
对于 北\\京,我该如何处理????
把 \\ 替换成 \\\\
如果我表示value 为 北\京
这个呢?
@roboth: C#中的字符串变量不能这么写。
@程序猿.码农: 我想表示这样的数据。比如通过录入框录入的 北\京
@roboth: 你写成这样 {\"id\":1234,\"uname\":\"北\\\\京\"}
实际的字符串的值是:{"id":1234,"uname":"北\\京"}
json反序列化的时候,会再判断一次转义字符 \ ,从而得到 uanme = "北\京"
@roboth: 你录入的是 北\京,没有问题,json反序列化的时候会再判断一次转义字符,所以你需要把为原字符串再增加一次转义判断。也就是说你读出来的字符串是这样:北\京,而json能解析的字符串是这样:北\\京,所以你需要在读出来的字符串里把转义字符 \ 替换成 \\ 。
@roboth:你可以看一下JSON对字符串的格式定义,"北\京" 这是错误的JSON字符串,因为控制字符"\"后能紧跟的字符不包含"京",正确的JSON字符串是 "北\\京".
@Launcher:
json的值有没有需要做特殊处理的?就像xml的
< | < | 小于 |
> | > | 大于 |
& | & | 和号 |
' | ' | 单引号 |
" | " | 引号 |
@roboth: 应该有吧,你看我给你的
http://www.json.org/json-zh.html 这个网址,需要转义的字符,你得先添加转义。
"{\"id\":1234,\"uname\":\"北\\京\"}"; 这格式对么 ?
其实楼主你应该先序列换一个对象看看生成的JSON字符串是不是跟你给的一样。就知道对错了。