vs2010 学习Silverlight学习笔记(15):数据与通信之JSON
概述:
有段时间没学习了,该继续了。不一定写完就发,有可能最后一起发。这个JSON我以前不太了解,只知道是web传输中的一种格式。今天初步了解一下这篇关于JSON是干什么的,写完后再看看W3C中JSON的资料。
内容:
创建两个实体,一个Post类,一个Blog类。与以往不同的是在sl中也有着相同两个类。
Post.cs
public class Post
{
public int Id { get; set; }
public string Title { get; set; }
public string Author { get; set; }
}
Blog.cs
public class Blog
{
public List<Post> Posts { get; set; }
}
新建HttpHandler用于向sl传输JSON数据。
public class BlogHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
//context.Response.Write("Hello World");
List<Post> posts = new List<Post>()
{
new Post{Id=1,Title="1a",Author="li"},
new Post{Id=2,Title="2a",Author="li"},
new Post{Id=3,Title="3a",Author="li"},
new Post{Id=4,Title="4a",Author="li"},
new Post{Id=5,Title="5a",Author="li"}
};
Blog blog = new Blog();
blog.Posts = posts;
context.Response.Write(JavaScriptConvert.SerializeObject(blog));
}
public bool IsReusable
{
get
{
return false;
}
}
}
传出数据的这一句:context.Response.Write(JavaScriptConvert.SerializeObject(blog));
所用的的JavaScriptConvert.SerializeObject来自JSON,在sl中添加引用中会有System.Json;但这WEB中并没有,这里用的是李老师源码中的Dll文件引用。有兴趣的可以对Json.net做了解。
在此时可以查看http://localhost:8081/BlogHandler.ashx,但此时浏览器显示的是错误:文件顶层无效。在下面的留言中也发现有个这错误的,但并没有原因和方法。先不管他,做剩下的部分。
布局界面:
<UserControlx:Class="SLDemo16JOSN.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400"Loaded="UserControl_Loaded">
<Grid Background="#46461F">
<Grid.RowDefinitions>
<RowDefinitionHeight="40"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Border Grid.Row="0" Grid.Column="0"CornerRadius="15"
Width="240" Height="36"Background="Orange"
Margin="20 0 0 0" HorizontalAlignment="Left">
<TextBlock Text="最新随笔" Foreground="White"
HorizontalAlignment="Left"VerticalAlignment="Center"
Margin="20 0 00"></TextBlock>
</Border>
<ListBox x:Name="Posts" Grid.Row="1"Margin="40 10 10 10">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanelOrientation="Horizontal">
<TextBlockText="{Binding Id}" Height="40"Foreground="Red"></TextBlock>
<TextBlockText="{Binding Title}" Height="40"></TextBlock>
<TextBlock Text="{BindingAuthor}" Height="40"Foreground="Orange"></TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</UserControl>
MainPage.cs界面:需要添加引用System.Net;,System.ServiceModel.Web;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Net;
using System.IO;
using System.Runtime.Serialization.Json;
using System.Threading;
namespace SLDemo16JOSN
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
}
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
Uri endpoint = newUri("http://localhost:8081/BlogHandler.ashx");
WebRequest request = WebRequest.Create(endpoint);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.BeginGetResponse(new AsyncCallback(ResponseReady), request);
}
void ResponseReady(IAsyncResult asyncResult)
{
WebRequest request = asyncResult.AsyncState as WebRequest;
WebResponse response = request.EndGetResponse(asyncResult);
using (Stream responseStream = response.GetResponseStream())
{
DataContractJsonSerializerjsonSerializer =
newDataContractJsonSerializer(typeof(Blog));
Blog blog =jsonSerializer.ReadObject(responseStream) as Blog;
//Posts.ItemsSource = blog.Posts;
//new Thread(() => {Posts.Dispatcher.BeginInvoke(() => Posts.ItemsSource = blog.Posts);}).Start();
Posts.Dispatcher.BeginInvoke(()=> Posts.ItemsSource = blog.Posts);
}
}
}
}
可能是因为Handler在浏览器中出错的原因吧,在sl页面数据赋值的时候用原来的:
//Posts.ItemsSource = blog.Posts;就会出现数据为空的情况。
具体原因我不了解,不过有人给出了如下两种解决方法:
new Thread(() => {Posts.Dispatcher.BeginInvoke(() => Posts.ItemsSource = blog.Posts);}).Start();
或 Posts.Dispatcher.BeginInvoke(() => Posts.ItemsSource =blog.Posts);
总结:
这个JSON以前没接触过,以后也不一定接触多少。我认为学习这个主要不是记住这篇中每一句代码应该怎么写,而是以后遇到时我只知道用JSON需要怎么序列化和怎么反序列化格式,具体的代码可以网上查一查。已经学了几篇的数据通信部分了,其实好多东西差不多,服务器端不是Handler,就是Service,数据先要封装序列化,然后再反序列化显示。但我觉得就凭我这并不聪明的脑袋,记住所有的使用方法是有困难的,但记住他们的区别和关键特征还是有可能的。
转载于:https://www.cnblogs.com/yaoge/archive/2010/09/09/1822604.html
vs2010 学习Silverlight学习笔记(15):数据与通信之JSON相关推荐
- vs2010 学习Silverlight学习笔记(11):数据与通信之WebClient
概要: 基础知识终于学完了,我今天又从第一篇看到第十篇,发现明白了一些东西,还有忘记了部分东西.呵呵,咱不能猴子掰玉米,学了新的忘记旧的.要经常去复习,去用.这一篇是数据通信部分的第一篇,有些东西没接 ...
- vs2010 学习Silverlight学习笔记(7):控件样式与模板
概要: 终于知道Silverlight--App.xaml是干什么用的了,不仅可以用来封装样式(类似css),还可以制定控件模版...好强大的功能啊. 封装: 继续学习<一步一步学Silverl ...
- vs2010 学习Silverlight学习笔记(8):使用用户控件
概要: 这个类似于封装控件样式.不过封装的是整个或是多个控件罢了,然后用的时候就可以直接引用过来了. 创建用户控: 这个也很简单,不过有几个地方需要注意下.这个就不照抄了,咱们也自己写一个. 步骤: ...
- 大数据之路读书笔记-15数据质量
大数据之路读书笔记-15数据质量 随着 IT向DT 时代的转变,数据的重要性不言而喻,数据的应用也日趋繁茂,数据正扮演着一个极其重要的角色.而对于被日益重视的数据,如何保障其质量也是间里巴巴乃至业界都 ...
- (16):Silverlight 2 数据与通信之JSON
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- vs2010 学习Silverlight学习笔记(18):JavaScript
概要: 此篇主要学习SL中关于JS的应用. 内容: 1使用GetProperty获取脚本对象 对已存在的JS方法调用,比如: function Hello(message) { var ...
- 统计学习导论_统计学习导论 | 读书笔记15 | 广义可加模型
ISLR 7.7 广义可加模型 要点: 0.广义可加模型介绍 1.用于回归问题的GAM -- 多元线性回归的推广 2.用于分类问题的GAM -- 逻辑回归的推广 3.GAM的优点与不足 0. Gene ...
- SilverLight学习笔记--实际应用(一)(4):手把手建立一个Silverlight应用程序之同步数据校验1...
现在我们的程序有了添加和删除以及修改功能,下面我们看一看如何让程序具备数据校验功能.我们将用两种方式实现数据的校验,一种是在客户端进行同步校验.另一种是在服务器端进行异步校验. 本篇我们先实现如何 ...
- 分享Silverlight/WPF/Windows Phone一周学习导读(8月15日-8月19日)
分享Silverlight/WPF/Windows Phone一周学习导读(8月15日-8月19日) 本周Silverlight学习资源更新: Silverlight Tools 4安装时的错误提示 ...
最新文章
- 洛谷P2698 [USACO12MAR]花盆Flowerpot
- NUMA架构的CPU -- 你真的用好了么?
- 3G手机Android应用开发视频教程_黎活明老师的视频(第三天课程)总共有八天课程...
- python global nonlocal
- C结构体之位域(位段)
- 美国佐治亚大学计算机专业,乔治亚大学计算机科学类排名,真是细致的看
- 如何在Java中分割字符串
- android电视接跳舞毯,跳舞毯怎么连接电视 跳舞毯怎么玩
- [TJOI 2015] 线性代数
- Intent调用大全
- ssm项目之Bookstrap创建页面并分页查询
- 基于STM32的智能鱼缸设计
- Matlab带阻滤波器实验报告,有源滤波器实验报告
- ProtoBuf生成EmmyLua注解API提示文件(支持复杂的嵌套结构)
- 计算机鼠标滚轮不流畅,鼠标滚轮不灵敏怎么办_鼠标中间的滚轮不灵敏了如何解决...
- 《剑指0ffer》刷题笔记 -01 二维数组中的查找
- 只有他自己知道——生活所迫罢了
- 该不该造自己的轮子?
- Best Free Web Applications
- surface go写php,【反馈】超便宜:851rmb的Surface go - 笔记本电脑(Notebook)版 - 北大未名BBS...
热门文章
- 怎么算matlab算法复杂度,算法复杂度分析
- OpenSSL(加密方式,加密算法,自签证书)
- oracle中数据泵只导出索引,细致入微:如何使用数据泵导出表的部分列数据
- 常见排序算法详解 (收藏!)
- 《深入解析 MAC OS X iOS 操作系统》PDF 带书签
- 解决问题的经验-javaweb-第一次-已掌握技术栈大致总结(部分),和相关理解,总结,以及对未来学习方向的规划
- 使用代理下载android系统源码和SDK
- C++中vector容器为什么扩容时按照2倍或者1.5倍进行扩容
- 浅析C++中的this指针 通过空指针(NULL)可以正确调用一些类的成员函数?
- linux getopts学习笔记