public static T Get <T>(this ShibaObject shibaObject, string name) { var value = shibaObject.FirstOrDefault(it => it.Key == name).Value; switch (value) { case null: return(default); case JToken token: break; default: { var result = Singleton <ValueVisitor> .Instance.DynamicVisit(value, null); if (result is T targetResult) { return(targetResult); } if (result.TryChangeType(typeof(T), out var castResult)) { return((T)castResult); } break; } } return(default);
private ShibaObject Visit(JObject item, IShibaContext context) { var dic = new ShibaObject(); foreach (var(key, value) in item) { dic.TryAdd(key, DynamicVisit(value, context)); } return(dic); }
private ShibaObject VisitJavascriptObject(JavaScriptValue value) { var propers = VisitJavascriptArray(value.GetOwnPropertyNames()).Cast <string>().ToList(); var obj = new ShibaObject(); foreach (var name in propers) { obj.TryAdd(name, Visit(value.GetProperty(name.ToJavaScriptPropertyId()), null)); } return(obj); }