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をサポートする方法
実はこれは内蔵サポートです.去年書いた文章は一つのやり方で、本文はその上でもう少し技術点を明らかにして、みんなに参考にします.
プレゼンテーションのために簡単なプロジェクトを用意しました
この例では、データ・モデルとしてLINQ to SQLを使用し、NorthwindデータベースのCustomersテーブルにアクセスしました.
同時に、最も簡単なData Serviceを追加しました.
【備考】上記の手順が不明な場合は、http://msdn.microsoft.com/en-us/library/cc907912.aspxで基礎的な学習を行ってください
このサービスが実行された後の効果は以下の通りです.
Customersというエンティティセットにアクセスすると、次の結果が得られます.
デフォルトではXML(正確にはAtom)形式でデータを返します.
では、元の問題に戻ります.では、json形式のデータをどのように返しますか.http://www.cnblogs.com/chenxizhang/archive/2010/10/27/1862898.htmlこの文章は確かに一つの方法を提供していますが、実際には本当にそうする必要がありますか?
Javascriptでサービスにアクセスするにはjson形式のデータが必要である以上、javascriptでこのサービスにアクセスしてみましょう.いったいどうなるのでしょうか.
次の例では、スクリプトを書くのに大好きなjqueryを使いました.
つまり,jqueryでgetJSONメソッドでリクエストを開始すればよい.Fiddlerツールのモニタリングにより、Requestにはアプリケーション/jsonというフォーマットが表示されます.
監視された返信は以下の通りです.
ページに表示される効果は次のとおりです.
.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内蔵はjson形式をサポートしており、クライアントが要求を開始する際にjson形式を返す必要があることを指定することに重点を置いている.
では、話題をさらに伸ばして、普通のクライアントプログラムでjson形式のデータを返したい場合は、どうすればいいのでしょうか.
実は簡単です.リクエストを開始するときにjson形式でデータを返すように指定することができます.以下は簡単な例です.
.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; }
このjsonの文字列をオブジェクトに変換して処理する方法については,本論文で議論する範囲ではない.興味があればDataContractJsonSerializerというタイプを知ることができます.
私が予見できるのは、あなたが本当にこれらを知ってから、私と同じ感慨を抱くことです.
1.管理コードでは、なるべくXML、LINQ to XMLといった技術でデータを解析するのが便利
2.javascriptコードでは、できるだけ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をサポートする方法
実はこれは内蔵サポートです.去年書いた文章は一つのやり方で、本文はその上でもう少し技術点を明らかにして、みんなに参考にします.
プレゼンテーションのために簡単なプロジェクトを用意しました
この例では、データ・モデルとしてLINQ to SQLを使用し、NorthwindデータベースのCustomersテーブルにアクセスしました.
同時に、最も簡単なData Serviceを追加しました.
【備考】上記の手順が不明な場合は、http://msdn.microsoft.com/en-us/library/cc907912.aspxで基礎的な学習を行ってください
このサービスが実行された後の効果は以下の通りです.
Customersというエンティティセットにアクセスすると、次の結果が得られます.
デフォルトでは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というフォーマットが表示されます.
監視された返信は以下の通りです.
ページに表示される効果は次のとおりです.
.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内蔵は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; }
このjsonの文字列をオブジェクトに変換して処理する方法については,本論文で議論する範囲ではない.興味があればDataContractJsonSerializerというタイプを知ることができます.
私が予見できるのは、あなたが本当にこれらを知ってから、私と同じ感慨を抱くことです.
1.管理コードでは、なるべくXML、LINQ to XMLといった技術でデータを解析するのが便利
2.javascriptコードでは、できるだけJSONで、直接オブジェクトでアクセスできます.