首页 新闻 会员 周边 捐助

wcf rest 反序列化问题

0
悬赏园豆:20 [待解决问题]
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 时出现错误。遇到意外字符“ä”。

 

对于 北\\京,我该如何处理????

roboth的主页 roboth | 初学一级 | 园豆:28
提问于:2012-08-13 17:14
< >
分享
所有回答(3)
0

把 \\ 替换成 \\\\

Launcher | 园豆:45050 (高人七级) | 2012-08-13 17:48

如果我表示value 为 北\京

这个呢?

支持(0) 反对(0) roboth | 园豆:28 (初学一级) | 2012-08-13 17:53

@roboth: C#中的字符串变量不能这么写。

支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2012-08-13 17:58

@程序猿.码农: 我想表示这样的数据。比如通过录入框录入的 北\京

支持(0) 反对(0) roboth | 园豆:28 (初学一级) | 2012-08-13 18:05

@roboth: 你写成这样 {\"id\":1234,\"uname\":\"北\\\\京\"}

实际的字符串的值是:{"id":1234,"uname":"北\\京"}

json反序列化的时候,会再判断一次转义字符 \ ,从而得到 uanme = "北\京"

支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2012-08-13 18:06

@roboth: 你录入的是 北\京,没有问题,json反序列化的时候会再判断一次转义字符,所以你需要把为原字符串再增加一次转义判断。也就是说你读出来的字符串是这样:北\京,而json能解析的字符串是这样:北\\京,所以你需要在读出来的字符串里把转义字符 \ 替换成 \\ 。

支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2012-08-13 18:20

@roboth:你可以看一下JSON对字符串的格式定义,"北\京" 这是错误的JSON字符串,因为控制字符"\"后能紧跟的字符不包含"京",正确的JSON字符串是 "北\\京".

 http://www.json.org/json-zh.html

支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2012-08-13 18:29

@Launcher: 

json的值有没有需要做特殊处理的?就像xml的

&lt; < 小于
&gt; > 大于
&amp; & 和号
&apos; ' 单引号
&quot; " 引号
支持(0) 反对(0) roboth | 园豆:28 (初学一级) | 2012-08-23 10:29

@roboth: 应该有吧,你看我给你的

http://www.json.org/json-zh.html 这个网址,需要转义的字符,你得先添加转义。

支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2012-08-23 11:10
0

"{\"id\":1234,\"uname\":\"北\\京\"}";  这格式对么 ?

CQL421182 | 园豆:202 (菜鸟二级) | 2012-08-13 18:01
0

其实楼主你应该先序列换一个对象看看生成的JSON字符串是不是跟你给的一样。就知道对错了。

chenping2008 | 园豆:9836 (大侠五级) | 2012-08-13 21:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册