|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Dynamic;
namespace fastJSON
{
internal class DynamicJson : DynamicObject
{
private IDictionary<string, object> Dictionary { get; set; }
public DynamicJson(string json)
{
var dictionary = fastJSON.JSON.Instance.Parse(json);
if (dictionary is IDictionary<string, object>)
this.Dictionary = (IDictionary<string, object>)dictionary;
}
private DynamicJson(object dictionary)
{
if (dictionary is IDictionary<string, object>)
this.Dictionary = (IDictionary<string, object>)dictionary;
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
if (this.Dictionary.TryGetValue(binder.Name, out result) == false)
if (this.Dictionary.TryGetValue(binder.Name.ToLower(), out result) == false)
return false;// throw new Exception("property not found " + binder.Name);
if (result is IDictionary<string, object>)
{
result = new DynamicJson(result as IDictionary<string, object>);
}
else if (result is List<object>)
{
List<object> list = new List<object>();
foreach (object item in (List<object>)result)
{
if (item is IDictionary<string, object>)
list.Add(new DynamicJson(item as IDictionary<string, object>));
else
list.Add(item);
}
result = list;
}
return this.Dictionary.ContainsKey(binder.Name);
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
Mehdi first started programming when he was 8 on BBC+128k machine in 6512 processor language, after various hardware and software changes he eventually came across .net and c# which he has been using since v1.0.
He is formally educated as a system analyst Industrial engineer, but his programming passion continues.
* Mehdi is the 5th person to get 6 out of 7 Platinum's on Code-Project (13th Jan'12)
* Mehdi is the 3rd person to get 7 out of 7 Platinum's on Code-Project (26th Aug'16)