vs2010 학습Silverlight 학습노트(15): 데이터와 통신의 JSON

8564 단어 silverlight
개요:
한동안 공부를 안 했으니 계속해야겠다.꼭 쓰고 보내는 건 아니고 마지막에 같이 보낼 수도 있어요.이 JSON은 제가 예전에 잘 몰랐는데 웹 전송의 한 형식인 줄만 알았어요.오늘은 JSON이 무엇을 하는지 초보적으로 알아보고, 다 쓴 후에 W를 보도록 하겠습니다.
3C
중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를 볼 수 있지만 브라우저가 오류를 표시합니다: 파일 맨 위에 올바르지 않습니다.아래 댓글에서도 이 오류가 발견됐지만 원인과 방법은 없었다.우선 그를 상관하지 않고 남은 부분을 해라.
레이아웃 인터페이스:
   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">
 
   
       
           
           
       

       
           
       

                  Width="240"Height="36"Background="Orange"
           Margin="20 0 0 0"HorizontalAlignment="Left">
                   HorizontalAlignment="Left"VerticalAlignment="Center"
                   Margin="20 0 00">

       

       
           
               
                    
                       
                       
                        
                   
               

           

       

   


 
MainPage.cs 인터페이스: 참조 시스템을 추가해야 합니다.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가 아니면 서비스이기 때문에 데이터는 먼저 봉인하여 서열화한 다음에 반서열화 디스플레이를 해야 한다.하지만 똑똑하지 않은 내 머리로 모든 사용 방법을 기억하는 것은 어렵지만 그들의 차이점과 관건적인 특징을 기억하는 것은 가능하다고 생각한다.

좋은 웹페이지 즐겨찾기