この記事では、JSONデータを操作するための小さなアプリケーションを紹介します。これは、.NET 4.0で使用可能な機能を示しています。 JSON形式の問題、および動的なデータ型の処理については、表面的に調べます。
ジョンソン
大衆に知られているこのようなクールなジョークがあります:
JSON (JavaScript Object Notation)は単純なデータ交換形式であり、人とコンピューターの両方で読み書きするのに便利です。 これは
、ECMA-262 3rd Edition-1999年12月の標準で定義され
て いるJavaScriptプログラミング言語のサブセット
に基づいて
います 。 JSONは実装言語から完全に独立したテキスト形式ですが、C、C ++、C#、Java、JavaScript、Perl、Pythonなど、Cに似た言語のプログラマーに馴染みのある規則を使用しています。 これらのプロパティにより、JSONは理想的なデータ交換言語になります。
もっと...JSONとアプリケーション
まあ、通常、アプリケーションでJSONでオブジェクトを受信する場合、サポートのためにインフラストラクチャを準備する必要があります(たとえば、
DataContractJsonSerializerと
このようなソリューションを使用する)。 ただし、これには開発者からかなりの時間がかかります。 この点で、JSONメカニズムを.NET 4.0の動的機能のレールに置き、それを使って作業することを楽しみたいという情熱的な要望がありました;)
ダイナミックオブジェクト
DynamicObject-実行時にオブジェクトの動的な動作を取得できる継承元の単純なクラスを提供します。 このクラスから継承し、そのメソッドの一部を再定義すると、これに必要なすべての基本的なロジックが実装されます。
DLRホスティングやその他の魅力に興味があり、質問についてもう少し詳しく知りたい場合は、スライドとスライド(
こちらと
こちら )を
ご覧ください 。
開発へ
JSONを使用する際に不便を感じないように、
JMS Newtonの JSON.NETと呼ばれるソリューションを使用(マージおよび参照)することをお勧めします。このプロジェクトは無料で、.NETスタック内でJSONを使用するためのすべての基本要件を満たしていますLINQを含む)。
はい。さらに、Visual Studio 2010 Beta 1などの.NET 4.0b1で動作するIDEが必要です(ちなみに、 #developはそれほど遅れていません )。
次のようなアプリケーションを作成します。
string input = @"{CPU: 'Intel', Drives: ['DVD read/writer',
" "500 gigabyte hard drive" " ]}" ;
dynamic computer = new DynamicJSON(input);
* This source code was highlighted with Source Code Highlighter .
そして、コンピューター上で見つかったプロパティを確認してください。
>> computer.CPU
"Intel"
>> computer.Drives
[
"DVD read/writer" ,
"500 gigabyte hard drive"
]
>> computer.Drives[0]
"DVD read/writer"
* This source code was highlighted with Source Code Highlighter .
これまでのところ、DynamicJSONが何であるかわからないことを考えると、珍しいことは何もありません。
using Newtonsoft.Json.Linq;
public class DynamicJSON : DynamicObject
{
private JObject _data;
public DynamicJSON( string data)
{
_data = JObject.Parse(data);
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
result = _data[binder.Name];
return true ;
}
}
* This source code was highlighted with Source Code Highlighter .
そして、この例の作業に必要なのはこれだけです。そのようなことに非常に満足しているので、同様の方法を決定に使用することをお勧めします。
誰かが今後のDLRのトピックに興味を持っている場合、私はより深くあなたに伝えることができます、フィードバックを残す