概述:

有段时间没学习了,该继续了。不一定写完就发,有可能最后一起发。这个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相关推荐

  1. vs2010 学习Silverlight学习笔记(11):数据与通信之WebClient

    概要: 基础知识终于学完了,我今天又从第一篇看到第十篇,发现明白了一些东西,还有忘记了部分东西.呵呵,咱不能猴子掰玉米,学了新的忘记旧的.要经常去复习,去用.这一篇是数据通信部分的第一篇,有些东西没接 ...

  2. vs2010 学习Silverlight学习笔记(7):控件样式与模板

    概要: 终于知道Silverlight--App.xaml是干什么用的了,不仅可以用来封装样式(类似css),还可以制定控件模版...好强大的功能啊. 封装: 继续学习<一步一步学Silverl ...

  3. vs2010 学习Silverlight学习笔记(8):使用用户控件

    概要: 这个类似于封装控件样式.不过封装的是整个或是多个控件罢了,然后用的时候就可以直接引用过来了. 创建用户控: 这个也很简单,不过有几个地方需要注意下.这个就不照抄了,咱们也自己写一个. 步骤: ...

  4. 大数据之路读书笔记-15数据质量

    大数据之路读书笔记-15数据质量 随着 IT向DT 时代的转变,数据的重要性不言而喻,数据的应用也日趋繁茂,数据正扮演着一个极其重要的角色.而对于被日益重视的数据,如何保障其质量也是间里巴巴乃至业界都 ...

  5. (16):Silverlight 2 数据与通信之JSON

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  6. vs2010 学习Silverlight学习笔记(18):JavaScript

    概要:        此篇主要学习SL中关于JS的应用. 内容: 1使用GetProperty获取脚本对象 对已存在的JS方法调用,比如: function Hello(message) { var ...

  7. 统计学习导论_统计学习导论 | 读书笔记15 | 广义可加模型

    ISLR 7.7 广义可加模型 要点: 0.广义可加模型介绍 1.用于回归问题的GAM -- 多元线性回归的推广 2.用于分类问题的GAM -- 逻辑回归的推广 3.GAM的优点与不足 0. Gene ...

  8. SilverLight学习笔记--实际应用(一)(4):手把手建立一个Silverlight应用程序之同步数据校验1...

    现在我们的程序有了添加和删除以及修改功能,下面我们看一看如何让程序具备数据校验功能.我们将用两种方式实现数据的校验,一种是在客户端进行同步校验.另一种是在服务器端进行异步校验.   本篇我们先实现如何 ...

  9. 分享Silverlight/WPF/Windows Phone一周学习导读(8月15日-8月19日)

    分享Silverlight/WPF/Windows Phone一周学习导读(8月15日-8月19日) 本周Silverlight学习资源更新: Silverlight Tools 4安装时的错误提示 ...

最新文章

  1. 洛谷P2698 [USACO12MAR]花盆Flowerpot
  2. NUMA架构的CPU -- 你真的用好了么?
  3. 3G手机Android应用开发视频教程_黎活明老师的视频(第三天课程)总共有八天课程...
  4. python global nonlocal
  5. C结构体之位域(位段)
  6. 美国佐治亚大学计算机专业,乔治亚大学计算机科学类排名,真是细致的看
  7. 如何在Java中分割字符串
  8. android电视接跳舞毯,跳舞毯怎么连接电视 跳舞毯怎么玩
  9. [TJOI 2015] 线性代数
  10. Intent调用大全
  11. ssm项目之Bookstrap创建页面并分页查询
  12. 基于STM32的智能鱼缸设计
  13. Matlab带阻滤波器实验报告,有源滤波器实验报告
  14. ProtoBuf生成EmmyLua注解API提示文件(支持复杂的嵌套结构)
  15. 计算机鼠标滚轮不流畅,鼠标滚轮不灵敏怎么办_鼠标中间的滚轮不灵敏了如何解决...
  16. 《剑指0ffer》刷题笔记 -01 二维数组中的查找
  17. 只有他自己知道——生活所迫罢了
  18. 该不该造自己的轮子?
  19. Best Free Web Applications
  20. surface go写php,【反馈】超便宜:851rmb的Surface go - 笔记本电脑(Notebook)版 - 北大未名BBS...

热门文章

  1. 怎么算matlab算法复杂度,算法复杂度分析
  2. OpenSSL(加密方式,加密算法,自签证书)
  3. oracle中数据泵只导出索引,细致入微:如何使用数据泵导出表的部分列数据
  4. 常见排序算法详解 (收藏!)
  5. 《深入解析 MAC OS X iOS 操作系统》PDF 带书签
  6. 解决问题的经验-javaweb-第一次-已掌握技术栈大致总结(部分),和相关理解,总结,以及对未来学习方向的规划
  7. 使用代理下载android系统源码和SDK
  8. C++中vector容器为什么扩容时按照2倍或者1.5倍进行扩容
  9. 浅析C++中的this指针 通过空指针(NULL)可以正确调用一些类的成员函数?
  10. linux getopts学习笔记