Pull to refresh

DynamicObject, JSON и ближайшее будущее

Reading time3 min
Views3.1K
В данной статье хочу ознакомить вас с небольшим приложением для работы с JSON данными, демонстрирующим возможности, доступные нам в .NET 4.0. Поверхностно будут рассмотрены вопросы JSON-формата, а так же работы с динамическими типами данных.

JSON



Есть такая классная шутка, известная широким массам:

3763158824_e2f57810c4[1] JSON (JavaScript Object Notation) — простой формат обмена данными, удобный для чтения и написания как человеком, так и компьютером. Он основан на подмножестве языка программирования JavaScript, определенного в стандарте ECMA-262 3rd Edition — December 1999. JSON — текстовый формат, полностью независимый от языка реализации, но он использует соглашения, знакомые программистам C-подобных языков, таких как C, C++, C#, Java, JavaScript, Perl, Python и многих других. Эти свойства делают JSON идеальным языком обмена данными. далее…

JSON и ваше приложение



Ну так вот, обычно, получая объекты по JSON в наших приложениях мы должны подготовить инфраструктуру для их поддержки (к примеру с помощью DataContractJsonSerializer и решения на типа этого). Однако это занимает значительное время у разработчика. В связи с этим у меня появилось страстное желание поставить JSON механизмы на рельсы динамических возможностей .NET 4.0 и получать от работы с ним одно удовольствие ;)

DynamicObject



DynamicObject — Предоставляет нам простой класс, наследуясь от которого мы можем получить динамическое поведение объекта на этапе исполнения. Наследуясь от этого класса и переопределяя некоторые его методы реализуется вся основная логика необходимая нам для этого.

Если хостинг DLR и прочие прелести вас заинтересовали и вы хотите ознакомиться немного поглубже с вопросом, то можно посмотреть наше выступление здесь, а так же слайды (здесь и здесь).

К разработке



Для того, чтобы не испытывать неудобств при работе с JSON, я предлагаю воспользоваться (слить и зареференсить) решением от James Newton под названием JSON.NET, данный проект свободен и удовлетворяет всем основным требованиям работы с JSON в рамках .NET-стека (в том числе и LINQ).

Да, к тому же нам понадобится IDE, умеющая работать с .NET 4.0b1, к примеру Visual Studio 2010 Beta 1 (кстати #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, могу рассказать поглубже, оставляйте фидбек
Tags:
Hubs:
Total votes 26: ↑19 and ↓7+12
Comments16

Articles