Skip to content

Repository files navigation

DynamicJson

dynamic json structure for C# 4.0.

Info

Archive, import from Codeplex.

Features

  • Intuitive operation by "dynamic".
  • This library is only 1 class and written in 400 lines.
  • Available in NuGet DynamicJson

Read and Access

// Parse (from JsonString to DynamicJson)varjson=DynamicJson.Parse(@"{""foo"":""json"", ""bar"":100, ""nest"":{ ""foobar"":true } }");varr1=json.foo;// "json" - dynamic(string)varr2=json.bar;// 100 - dynamic(double)varr3=json.nest.foobar;// true - dynamic(bool)varr4=json["nest"]["foobar"];// can access indexer

Operate

varjson=DynamicJson.Parse(@"{""foo"":""json"", ""bar"":100, ""nest"":{ ""foobar"":true } }");// Check Defined Peroperty// .name() is shortcut of IsDefined("name")varb1_1=json.IsDefined("foo");// truevarb2_1=json.IsDefined("foooo");// falsevarb1_2=json.foo();// true varb2_2=json.foooo();// false;// Check Array has datavararrayJson=DynamicJson.Parse(@"[1,10,200,300]");vartmp=arrayJson.IsDefined(0);//true, index 0vartmp2=arrayJosn.IsDefined(9);//false, index 9vartmp3=arrayJson[0];// 1, get index0 value// Addjson.Arr=newstring[]{"NOR","XOR"};// Add Arrayjson.Obj1=new{};// Add Objectjson.Obj2=new{foo="abc",bar=100};// Add and Init// Delete// ("name") is shortcut of Delete("name")json.Delete("foo");json.Arr.Delete(0);json("bar");json.Arr(1);// Replacejson.Obj1=5000;// Create New JsonObjectdynamicnewjson=newDynamicJson();newjson.str="aaa";newjson.obj=new{foo="bar"};// Serialize(to JSON String)varjsonstring=newjson.ToString();// {"str":"aaa","obj":{"foo":"bar"}}

Enumerate

// DynamicJson - (IsArray)vararrayJson=DynamicJson.Parse(@"[1,10,200,300]");foreach(intiteminarrayJson){Console.WriteLine(item);// 1, 10, 200, 300}// DynamicJson - (IsObject)varobjectJson=DynamicJson.Parse(@"{""foo"":""json"",""bar"":100}");foreach(KeyValuePair<string,dynamic>iteminobjectJson){Console.WriteLine(item.Key+":"+item.Value);// foo:json, bar:100}

Convert/Deserialize

publicclassFooBar{publicstringfoo{get;set;}publicintbar{get;set;}}vararrayJson=DynamicJson.Parse(@"[1,10,200,300]");varobjectJson=DynamicJson.Parse(@"{""foo"":""json"",""bar"":100}");// (type) is shortcut of Deserialize<type>()vararray1=arrayJson.Deserialize<int[]>();vararray2=(int[])arrayJson;// equals array1int[]array3=arrayJson;// equals array2// mapping by public property namevarfoobar1=objectJson.Deserialize<FooBar>();varfoobar2=(FooBar)objectJson;FooBarfoobar3=objectJson;// with linqvarobjectJsonList=DynamicJson.Parse(@"[{""bar"":50},{""bar"":100}]");varbarSum=((FooBar[])objectJsonList).Select(fb =>fb.bar).Sum();// 150vardynamicWithLinq=((dynamic[])objectJsonList).Select(d =>d.bar);

Serialize (to JSON String from Object)

// Serialize (from Object to JsonString)varobj=new{Name="Foo",Age=30,Address=new{Country="Japan",City="Tokyo"},Like=new[]{"Microsoft","Xbox"}};// {"Name":"Foo","Age":30,"Address":{"Country":"Japan","City":"Tokyo"},"Like":["Microsoft","Xbox"]}varjsonStringFromObj=DynamicJson.Serialize(obj);// [{"foo":"fooooo!","bar":1000},{"foo":"orz","bar":10}]varfoobar=newFooBar[]{newFooBar{foo="fooooo!",bar=1000},newFooBar{foo="orz",bar=10}};varjsonFoobar=DynamicJson.Serialize(foobar);

Notice: corner case

varnestJson=DynamicJson.Parse(@"{""tes"":10,""nest"":{""a"":0}");nestJson.nest();// This equals json.IsDefined("nest")nestJson.nest("a");// This equals json.nest.Delete("a")// if name is C#'s reserved word then put prefix "@"varjson=DynamicJson.Parse(@"{""int"":10,""event"":null}");varr1=json.@int;// 10.0varr2=json.@event;// null

Example : TwitterAPI

staticvoidMain(){varpublicTL=newWebClient().DownloadString(@"http://twitter.com/statuses/public_timeline.json");varstatuses=DynamicJson.Parse(publicTL);foreach(varstatusinstatuses){Console.WriteLine(status.user.screen_name);Console.WriteLine(status.text);}}

Example : TwitterAPI2

staticvoidMain(string[]args){// fetch and flatten user_timelinevarwc=newWebClient();varstatuses=Enumerable.Range(1,5).Select(i =>wc.DownloadString("http://twitter.com/statuses/user_timeline/neuecc.json?page="+i)).SelectMany(s =>(dynamic[])DynamicJson.Parse(s)).OrderBy(j =>j.id);foreach(varstatusinstatuses){Console.WriteLine(status.text);}}

About

dynamic json structure for C# 4.0.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages