求解析JOSON类库或者组件实例

VsirSoft 2015-12-30 04:26:21
本人在使用Newtonsoft.Json.dll解析下面这组数据的时候解析不成功
创建的是.net3.5程序 能提供DEMO者拿分 无论是插件也好 自带的类库也好 能提供DEMO能解析序列化就好
如果解析不了 麻烦说明原因 也可得分

所解析的数据请复制以下地址到浏览器,查看JOSN数据返回结果
https://s.taobao.com/search?data-key=sort&data-value=sale-desc&ajax=true&_ksTS=1450845845846_893&callback=jsonp894&q=%E6%97%B1%E5%86%B0%E9%9E%8B&js=1&stats_click=search_radio_all%3A1&initiative_id=staobaoz_20151223&ie=utf8&sort=sale-desc
...全文
222 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
VsirSoft 2015-12-31
  • 打赏
  • 举报
回复
引用 11 楼 51Crack 的回复:
[quote=引用 2 楼 starfd 的回复:] 你先用vs2013的选择性粘贴生成反序列化的类
引用 8 楼 VsirSoft 的回复:
[quote=引用 7 楼 51Crack 的回复:] jsonp894类在Class1.cs中
这位仁兄 例子我看了 请问Class1.cs是怎么生成的 是组件自动生成的 还是你自己一点点码的啊[/quote] 我有那闲工夫码吗 你不认真看回复啊,2楼说了 先复制数据,VS2013+里再选择性粘贴[/quote] 可喜可贺我又学会了一个新功能 这个完全不知道
VsirSoft 2015-12-31
  • 打赏
  • 举报
回复
引用 10 楼 sp1234 的回复:
jsonp894 这个东西毫无意义。你在 url 参数中给它什么值,那么返回时就会用你给的名字产生一个 javascript 函数调用语句。你要是写
&callback=dan_sui&
那么上述的代码中你就改为
result = result.Substring(8, result.Length - 10); 
就行了,因为你把这个函数名称改为7个字符的了,所以要对返回的字符串从 dan_sui( 之后开始截取,所以是从第8个字符(从0开始计数)开始截取的。
多谢几位指点,大概能清楚这个插件怎么去用了,顺便我想问一句啊,多出来的那几个字符 如果不去掉 是不是就不符合json的格式,所以会报错
VsirSoft 2015-12-31
  • 打赏
  • 举报
回复
引用 12 楼 hanjun0612 的回复:
按照2楼说的, vs 编辑菜单--》选择性黏贴--》将json。。。。这个 然后把你的 json放进去。(是json不是jsonp,也就是3楼说的,去掉你的 jsonp894还有还有一对括号)
多谢提供详细方法
正怒月神 2015-12-31
  • 打赏
  • 举报
回复
按照2楼说的, vs 编辑菜单--》选择性黏贴--》将json。。。。这个 然后把你的 json放进去。(是json不是jsonp,也就是3楼说的,去掉你的 jsonp894还有还有一对括号)
51Crack 2015-12-31
  • 打赏
  • 举报
回复
引用 2 楼 starfd 的回复:
你先用vs2013的选择性粘贴生成反序列化的类
引用 8 楼 VsirSoft 的回复:
[quote=引用 7 楼 51Crack 的回复:] jsonp894类在Class1.cs中
这位仁兄 例子我看了 请问Class1.cs是怎么生成的 是组件自动生成的 还是你自己一点点码的啊[/quote] 我有那闲工夫码吗 你不认真看回复啊,2楼说了 先复制数据,VS2013+里再选择性粘贴
  • 打赏
  • 举报
回复
jsonp894 这个东西毫无意义。你在 url 参数中给它什么值,那么返回时就会用你给的名字产生一个 javascript 函数调用语句。你要是写
&callback=dan_sui&
那么上述的代码中你就改为
result = result.Substring(8, result.Length - 10); 
就行了,因为你把这个函数名称改为7个字符的了,所以要对返回的字符串从 dan_sui( 之后开始截取,所以是从第8个字符(从0开始计数)开始截取的。
  • 打赏
  • 举报
回复
引用 5 楼 VsirSoft 的回复:
[quote=引用 3 楼 wg5945 的回复:] 把开头的 jsonp894( 和结尾的 ); 去掉~~
我直接取了一段数据部分 也是会报错 可能是因为jsonp的格式不适合那个插件 谁能给写个可以解析的DEMO啊 对于熟悉的人来说 应该不难[/quote] 你在请求的路径中写了
callback=jsonp894
所以它返回的 jsonp 的内容中就有这个函数。看来你对jsonp、javascript 函数,这两个概念,都不了解。 代码是这样的:
var url = "https://s.taobao.com/search?data-key=sort&data-value=sale-desc&ajax=true&_ksTS=1450845845846_893&callback=jsonp894&q=%E6%97%B1%E5%86%B0%E9%9E%8B&js=1&stats_click=search_radio_all%3A1&initiative_id=staobaoz_20151223&ie=utf8&sort=sale-desc%20%E6%9B%B4%E5%A4%9A%200%20%E5%88%86%E4%BA%AB%E5%88%B0%EF%BC%9A%20%E7%9B%B8%E5%85%B3%E6%8E%A8%E8%8D%90%EF%BC%9A%20Spark%E9%9B%B6%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8%EF%BC%881%EF%BC%89%EF%BC%9AScala%E5%9F%BA%E6%9C%AC%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B%E5%8F%8A%E7%A8%8B%E5%BA%8F%E6%8E%A7%E5%88%B6%E8%A7%A3%E6%9E%90%E5%A4%A7%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E6%9C%8D%E5%8A%A1360%E5%BA%A6%E8%A7%A3%E6%9E%90%E4%BA%9A%E9%A9%AC%E9%80%8AAWS%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8%E6%9C%8D%E5%8A%A1%E2%80%9C%E6%94%92%E8%AF%BE%E2%80%9D%E8%AF%BE%E9%A2%983%EF%BC%9A%E5%AE%89%E5%8D%93%E7%BC%96%E8%AF%91%E4%B8%8E%E5%BC%80%E5%8F%91%E3%80%81Linux%E5%86%85%E6%A0%B8%E5%8F%8A%E9%A9%B1%E5%8A%A8%20%E5%AF%B9%E6%88%91%E6%9C%89%E7%94%A8[0]%20%E4%B8%A2%E4%B8%AA%E6%9D%BF%E7%A0%96[0]%20%E5%BC%95%E7%94%A8%20|%20%E4%B8%BE%E6%8A%A5%20|%20%E7%AE%A1%E7%90%86%20%E5%9B%9E%E5%A4%8D%E6%AC%A1%E6%95%B0%EF%BC%9A8";
var result = Encoding.UTF8.GetString( new WebClient().DownloadData(url));
result = result.Trim();
result = result.Substring(9, result.Length - 11);       //去掉开头的 "jsonp894( 和 结尾的 ) 符号
var obj = JObject.Parse(result); 
你也可以在最后一行那里,使用
var obj = JsonConvert.DeserializeObject<YourType>(result);
去直接转换为强类型的对象。#2楼所说的意思,就是 vs 开发工具可以直接根据这个打印输出的 result 字符串的值,自动生成出强类型的 class。
VsirSoft 2015-12-30
  • 打赏
  • 举报
回复
引用 7 楼 51Crack 的回复:
jsonp894类在Class1.cs中
这位仁兄 例子我看了 请问Class1.cs是怎么生成的 是组件自动生成的 还是你自己一点点码的啊
51Crack 2015-12-30
  • 打赏
  • 举报
回复
jsonp894类在Class1.cs中
51Crack 2015-12-30
  • 打赏
  • 举报
回复
引用 5 楼 VsirSoft 的回复:
[quote=引用 3 楼 wg5945 的回复:] 把开头的 jsonp894( 和结尾的 ); 去掉~~
我直接取了一段数据部分 也是会报错 可能是因为jsonp的格式不适合那个插件 谁能给写个可以解析的DEMO啊 对于熟悉的人来说 应该不难[/quote] http://pan.baidu.com/s/1eRcnLUq 解析看Program.Main中jsonp894 c = Newtonsoft.Json.JsonConvert.DeserializeObject<jsonp894>(System.IO.File.ReadAllText("json.txt")); json.txt在Debug下
VsirSoft 2015-12-30
  • 打赏
  • 举报
回复
引用 3 楼 wg5945 的回复:
把开头的 jsonp894( 和结尾的 ); 去掉~~
我直接取了一段数据部分 也是会报错 可能是因为jsonp的格式不适合那个插件 谁能给写个可以解析的DEMO啊 对于熟悉的人来说 应该不难
VsirSoft 2015-12-30
  • 打赏
  • 举报
回复
引用 2 楼 starfd 的回复:
你先用vs2013的选择性粘贴生成反序列化的类
刚接触c#不太会啊
wg5945 2015-12-30
  • 打赏
  • 举报
回复
把开头的 jsonp894( 和结尾的 ); 去掉~~
  • 打赏
  • 举报
回复
你先用vs2013的选择性粘贴生成反序列化的类
VsirSoft 2015-12-30
  • 打赏
  • 举报
回复
顺便我说一下不是Newtonsoft.Json组件的版本问题,都已经检查过.分数后期会不断追加, 分数会给成功上传实例DEMO的人

110,533

社区成员

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

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

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