急!用Newtonsoft.Json读取JSON总是报错

qazaxsw126com 2012-05-24 02:11:04
急! 我引用了Newtonsoft.Json,然后用它序列化成对象总是不成功,提示:Unexpected character encountered while parsing value

以下是代码部分:

string sJson = "{\"Err\":[{\"Name\":\"BH_NotReadMessageLength\",\"ID\":10001,\"Note\":\"没有读取到数据包长度\"},{\"Name\":\"BH_NotReadIsCompress\",\"ID\":10002,\"Note\":\"没有读取到是否压缩标识\"}]}";

object json = JsonConvert.DeserializeObject(sJson); //这里报错

我应该怎么写才能获取json的值?
...全文
22515 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qazaxsw126com 2012-05-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

估计是你把字符串保存为UTF8编码的txt文件时,文件头自动加了一个字节用于识别文档编码方式。
而你读取文件时,把这个识别文档编码方式的字节一起读取出来了。
主要还是你读文件的代码是怎么写的?
你保存为UTF8文件,读取的时候最好也用UTF8编码。
[/Quote]

就是这个问题,记事本另存为的时候自动加了一个字节标识,而且从技术本读出来的字符串,手动复制的时候windows居然仍然隐形的保存了这个字节,所以连手工复制出来的字符串都用不了!!
我用程序写了个json文件,就可以读了。
非常感谢!!
qazaxsw126com 2012-05-24
  • 打赏
  • 举报
回复
使用Encoding.ASCII.GetBytes读了一下,发现两个字符串看起来一模一样,但是不能用的那个确实第一位多了个字节是63,我看ASCII表,63是个问号?
可这为什么呀,完全不明白呀
读文件的代码
public static string ReadStringFromFile(string FilePath)
{
using (FileStream fs = new FileStream(FilePath, FileMode.Open))
{

byte[] byArray = new byte[fs.Length];

fs.Read(byArray, 0, (int)fs.Length);

return Encoding.UTF8.GetString(byArray).Replace("\n","").Replace("\t","").Replace("\r","");
}
}
scjypzh 2012-05-24
  • 打赏
  • 举报
回复
估计是你把字符串保存为UTF8编码的txt文件时,文件头自动加了一个字节用于识别文档编码方式。
而你读取文件时,把这个识别文档编码方式的字节一起读取出来了。
主要还是你读文件的代码是怎么写的?
你保存为UTF8文件,读取的时候最好也用UTF8编码。
scjypzh 2012-05-24
  • 打赏
  • 举报
回复
使用Encoding.ASCII.GetBytes把你的sJson变量转换为字节数组一对比就明白了
qazaxsw126com 2012-05-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

http://forums.ext.net/showthread.php?7938-1-0-JSON-Deserializer-Error
Unexpected character encountered while parsing value的問題,多半是因為數據結構錯誤
[/Quote]

您给予的连接我看了,他的问题跟我一样,解决方案是进行了Encode,不过我没看懂他那段代码在哪里设置了Encode,能给些更具体的指导吗,谢谢
qazaxsw126com 2012-05-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

你的字符串有问题:string sJson = "{\"Err\":
你引号与中括号之间有个ASCII码为63的字符,楼主好生检查下,自己删除吧
[/Quote]

请问这个怎么看?
我刚才试了一下,吧例句的字符串直接赋值,就可以读取,然后我把字符串放进一个UTF8类型的文本文件,读出来(UTF8)变成字符串,跟手写的一模一样,就读取不了,我实验了一下,确实是{\"Err 后面出的问题
最奇怪的是,我用调试模式把从文件里读出来的字符串取出来,赋个变量值,跟上面直接写的变量值一模一样,一个字母都不差,然后运行,结果确实读取不了!!
如果把上面的字符串赋值到下面的变量,就能读取的了,郁闷死了
两个是一模一样啊!!
scjypzh 2012-05-24
  • 打赏
  • 举报
回复
你的字符串有问题:string sJson = "{\"Err\":
你引号与中括号之间有个ASCII码为63的字符,楼主好生检查下,自己删除吧
vinjent 2012-05-24
  • 打赏
  • 举报
回复
http://forums.ext.net/showthread.php?7938-1-0-JSON-Deserializer-Error
Unexpected character encountered while parsing value的問題,多半是因為數據結構錯誤

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧