private void MappNested(object from, IJavascriptObject resobject, JsGenericObject gres) { if (from == null) return; var propertyInfos = from.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance).Where(p => p.CanRead); foreach (var propertyInfo in propertyInfos) { var propertyName = propertyInfo.Name; object childvalue; try { childvalue = propertyInfo.GetValue(from, null); } catch(Exception e) { _Logger.Info(()=> $"Unable to convert property {propertyName} from {@from} exception {e}"); continue; } var childres = UnsafelMap(childvalue); _Context.WebView.Run(() => resobject.SetValue(propertyName, childres.JSValue)); gres.UpdateCSharpProperty(propertyName, childres); } }
public IJSCSGlue UnsafelMap(object from, object iadditional=null) { if (from == null) return JsGenericObject.CreateNull(_Context); var res = _Cacher.GetCached(from); if (res != null) return res; var command = from as ICommand; if (command != null) return _CommandFactory.Build(command); var simpleCommand = from as ISimpleCommand; if (simpleCommand != null) return _CommandFactory.Build(simpleCommand); var resultCommand = from as IResultCommand; if (resultCommand != null) return _CommandFactory.Build(resultCommand); IJavascriptObject value; if (_Context.WebView.Factory.CreateBasic(from, out value)) return new JSBasicObject(value, from); if (from.GetType().IsEnum) { var trueres = new JSBasicObject(_Context.WebView.Factory.CreateEnum((Enum)from), from); _Cacher.CacheLocal(from, trueres); return trueres; } var ienfro = from as IEnumerable; if (ienfro!=null) return Convert(ienfro); var resobject = _Context.WebView.Factory.CreateObject(true); var gres = new JsGenericObject(_Context, resobject, from); _Cacher.Cache(from, gres); MappNested(from, resobject,gres); MappNested(iadditional, resobject, gres); return gres; }
public IJSCSGlue InternalMap(object from, object iadditional=null) { if (from == null) return new JsGenericObject(_Context, null); var res = _Cacher.GetCached(from); if (res != null) return res; var command = from as ICommand; if (command != null) return _CommandFactory.Build(command); var simpleCommand = from as ISimpleCommand; if (simpleCommand != null) return _CommandFactory.Build(simpleCommand); var resultCommand = from as IResultCommand; if (resultCommand != null) return _CommandFactory.Build(resultCommand); var type = from.GetType(); if (_Context.WebView.Factory.IsTypeBasic(type)) return new JSBasicObject(from); if (type.IsEnum) { var trueres = new JSBasicObject(from); _Cacher.Cache(from, trueres); return trueres; } var ienfro = from as IEnumerable; if (ienfro!=null) return Convert(ienfro); var gres = new JsGenericObject(_Context, from); _Cacher.Cache(from, gres); MappNested(from ,gres); MappNested(iadditional, gres); return gres; }
public AttributeUpdater(JsGenericObject father, PropertyAccessor propertyAccessor, IJsCsGlue child) { Child = child; PropertyAccessor = propertyAccessor; Father = father; }