public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result) { int index = (int)indexes[0]; if (arr != null) { Type tt = arr[index].GetType(); if (tt.Name.Equals("JObject")) { result = new DynamicJsonObject(JObject.FromObject(arr[index])); } else if (tt.Name.Equals("JArray")) { result = new DynamicJsonObject(JArray.FromObject(arr[index])); } else { result = (JValue)arr[index]; } return(true); } return(base.TryGetIndex(binder, indexes, out result)); }
public override bool TryGetMember(GetMemberBinder binder, out object result) { if (node != null && node.SelectToken(binder.Name) != null) { Type tt = node.GetValue(binder.Name).GetType(); if (tt.Name.Equals("JObject")) { result = new DynamicJsonObject(JObject.FromObject(node.Value <JObject>(binder.Name))); } else if (tt.Name.Equals("JArray")) { result = new DynamicJsonObject(JArray.FromObject(node.Value <JArray>(binder.Name))); } else { result = node.Value <JValue>(binder.Name); } return(true); } else { return(base.TryGetMember(binder, out result)); } }
static void dynamicObjectFromJsonString() { dynamic obj = DynamicJsonObject.parseJSONString(jsonString); Console.WriteLine("Person.Name: {0}", obj.person.name); Console.WriteLine("Person:{0}", obj.person); Console.WriteLine("Movies[0]:{0}", obj.movies[0]); Console.WriteLine("Movies[1].name: {0}", obj.movies[1].name); }