ADOについて話しましょうNET Data Serviceデータフォーマット(xmlとjson)

13298 ワード

去年、ADOをどうするかを紹介する文章を書いたことがあります.NET Data Serviceは、jsonデータフォーマットを返します.興味があれば、次のリンクを参考にしてください.
http://www.cnblogs.com/chenxizhang/archive/2010/10/27/1862898.html
 
最近、ネットユーザーに、なぜこの成熟したフレームワーク(ADO.NET Data Service、現在の新バージョンではWCF Data Serviceと呼ばれている)が、カスタムのBehaviorでこの出力フォーマットを変える必要があるのかと聞かれた.
実際、私はこの問題をよく聞いたと思います.いくつかのことをもっと聞いて、なぜ、真相が現れるのかと思います.
 
では、いくつか質問しましょう.
1.jsonとは
jsonのフルネームはJavascript object notationを指し、このデータフォーマットはその名の通りJavascriptに用いられる原生的なデータフォーマットであり、xmlやhtmlに比べて体積が小さいという利点があると同時にjavascriptの解析と処理に最も適している.
 
2.なぜADO.NET Data Serviceはjsonをサポートする必要があります
ADO.NET Data Serviceは、さまざまなビジネスシーンで広く使用されているサービスであり、クライアント・プログラムでアクセスしたり、javascriptでアクセスしたりすることができます.javascriptでこのサービスにアクセスしたい場合は、jsonフォーマットをサポートすることが望ましい.
3. ADO.NET Data Serviceがjsonをサポートする方法
実はこれは内蔵サポートです.去年書いた文章は一つのやり方で、本文はその上でもう少し技術点を明らかにして、みんなに参考にします.
 
プレゼンテーションのために簡単なプロジェクトを用意しました
再谈谈ADO.NET Data Service 数据格式(xml和json)_第1张图片
この例では、データ・モデルとしてLINQ to SQLを使用し、NorthwindデータベースのCustomersテーブルにアクセスしました.
再谈谈ADO.NET Data Service 数据格式(xml和json)_第2张图片
同時に、最も簡単なData Serviceを追加しました.
再谈谈ADO.NET Data Service 数据格式(xml和json)_第3张图片
【備考】上記の手順が不明な場合は、http://msdn.microsoft.com/en-us/library/cc907912.aspxで基礎的な学習を行ってください
 
このサービスが実行された後の効果は以下の通りです.
再谈谈ADO.NET Data Service 数据格式(xml和json)_第4张图片
Customersというエンティティセットにアクセスすると、次の結果が得られます.
再谈谈ADO.NET Data Service 数据格式(xml和json)_第5张图片
デフォルトではXML(正確にはAtom)形式でデータを返します.
 
では、元の問題に戻ります.では、json形式のデータをどのように返しますか.http://www.cnblogs.com/chenxizhang/archive/2010/10/27/1862898.htmlこの文章は確かに一つの方法を提供していますが、実際には本当にそうする必要がありますか?
 
Javascriptでサービスにアクセスするにはjson形式のデータが必要である以上、javascriptでこのサービスにアクセスしてみましょう.いったいどうなるのでしょうか.
次の例では、スクリプトを書くのに大好きなjqueryを使いました.
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
    <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
    <script language="javascript" type="text/javascript">
        $(function () {

            var url = "NorthwindService.svc/Customers";
            $.getJSON(url, null, function (data) {
                var table = $("<table />");

                $(data.d).each(function () {
                    var tr = $("<tr />");
                    $("<td />").text(this.CompanyName).appendTo(tr);
                    tr.appendTo(table);
                });

                table.appendTo($("#jsonHolder"));

            });

        });

    </script>
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <div id="jsonHolder">
        <!--    json       Data Service,      -->
    </div>
</asp:Content>

つまり,jqueryでgetJSONメソッドでリクエストを開始すればよい.Fiddlerツールのモニタリングにより、Requestにはアプリケーション/jsonというフォーマットが表示されます.
再谈谈ADO.NET Data Service 数据格式(xml和json)_第6张图片
監視された返信は以下の通りです.
再谈谈ADO.NET Data Service 数据格式(xml和json)_第7张图片
ページに表示される効果は次のとおりです.
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
再谈谈ADO.NET Data Service 数据格式(xml和json)_第8张图片
こうしてみるとADO.NET Data Service内蔵はjson形式をサポートしており、クライアントが要求を開始する際にjson形式を返す必要があることを指定することに重点を置いている.
 
では、話題をさらに伸ばして、普通のクライアントプログラムでjson形式のデータを返したい場合は、どうすればいいのでしょうか.
実は簡単です.リクエストを開始するときにjson形式でデータを返すように指定することができます.以下は簡単な例です.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Net;


namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            var url = "http://localhost:9458/NorthwindService.svc/Customers";

            var client = new WebClient();
            client.Headers.Add("Accept:application/json");
            client.DownloadStringCompleted += (s, a) =>
            {
                Console.WriteLine(a.Result);
            };

            client.DownloadStringAsync(new Uri(url));

            Console.Read();
        }
    }
}

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
 
再谈谈ADO.NET Data Service 数据格式(xml和json)_第9张图片
このjsonの文字列をオブジェクトに変換して処理する方法については,本論文で議論する範囲ではない.興味があればDataContractJsonSerializerというタイプを知ることができます.
私が予見できるのは、あなたが本当にこれらを知ってから、私と同じ感慨を抱くことです.
1.管理コードでは、なるべくXML、LINQ to XMLといった技術でデータを解析するのが便利
2.javascriptコードでは、できるだけJSONで、直接オブジェクトでアクセスできます.