public Object Index() { Person pers = new Person { FirstName = "John", LastName="Smith", Age = 20, IsCertified=true }; Exception validationError = null; // pers.Validate(); RecordModelGenerator gen = new RecordModelGenerator(); string personDef = gen.RowToRecordInitJSON(pers, validationError).ToJSON(); return new Index { PersonDef = personDef }; }
private string recGeneratorLocalization(Client.RecordModelGenerator gen, string schema, string field, string value, string isoLang) { return(DoLocalizeRecordModel(schema, field, value, isoLang)); }
/// <summary> /// Makes portal from config. /// Due to the nature of Portal object there is no need to create other parametrized ctors /// </summary> protected Portal(IConfigSectionNode conf) : base(PortalHub.Instance) { const string PORTAL = "portal"; m_Name = conf.AttrByName(Configuration.CONFIG_NAME_ATTR).Value; if (m_Name.IsNullOrWhiteSpace()) { m_Name = this.GetType().Name; if (m_Name.EndsWith(PORTAL, StringComparison.OrdinalIgnoreCase) && m_Name.Length>PORTAL.Length) m_Name = m_Name.Substring(0, m_Name.Length-PORTAL.Length); } //Register with the Hub if (!PortalHub.Instance.m_Portals.Register( this )) throw new WaveException(StringConsts.PORTAL_HUB_INSTANCE_ALREADY_CONTAINS_PORTAL_ERROR.Args(m_Name)); m_Description = conf.AttrByName(CONFIG_DESCR_ATTR).ValueAsString(m_Name); m_Offline = conf.AttrByName(CONFIG_OFFLINE_ATTR).ValueAsBool(false); m_Default = conf.AttrByName(CONFIG_DEFAULT_ATTR).ValueAsBool(false); var puri = conf.AttrByName(CONFIG_PRIMARY_ROOT_URI_ATTR).Value; try{ m_PrimaryRootUri = new Uri(puri, UriKind.Absolute); } catch(Exception error) { throw new WaveException(StringConsts.CONFIG_PORTAL_ROOT_URI_ERROR.Args(m_Name, error.ToMessageWithType()), error); } m_DisplayName = conf.AttrByName(CONFIG_DISPLAY_NAME_ATTR).Value; if (m_DisplayName.IsNullOrWhiteSpace()) m_DisplayName = m_PrimaryRootUri.ToString(); m_Themes = new Registry<Theme>(); var nthemes = conf.Children.Where(c => c.IsSameName(CONFIG_THEME_SECTION)); foreach(var ntheme in nthemes) { var theme = FactoryUtils.Make<Theme>(ntheme, args: new object[]{this, ntheme}); if(!m_Themes.Register(theme)) throw new WaveException(StringConsts.CONFIG_PORTAL_DUPLICATE_THEME_NAME_ERROR.Args(theme.Name, m_Name)); } if (m_Themes.Count==0) throw new WaveException(StringConsts.CONFIG_PORTAL_NO_THEMES_ERROR.Args(m_Name)); m_DefaultTheme = m_Themes.FirstOrDefault(t => t.Default); if (m_DefaultTheme==null) throw new WaveException(StringConsts.CONFIG_PORTAL_NO_DEFAULT_THEME_ERROR.Args(m_Name)); m_ParentName = conf.AttrByName(CONFIG_PARENT_NAME_ATTR).Value; ConfigAttribute.Apply(this, conf); m_LocalizableContent = new Dictionary<string,string>(GetLocalizableContent(), StringComparer.InvariantCultureIgnoreCase); foreach(var atr in conf[CONFIG_LOCALIZATION_SECTION][CONFIG_CONTENT_SECTION].Attributes) m_LocalizableContent[atr.Name] = atr.Value; var gen = conf[CONFIG_RECORD_MODEL_SECTION]; m_RecordModelGenerator = FactoryUtils.Make<Client.RecordModelGenerator>(gen, typeof(Client.RecordModelGenerator), new object[]{gen}); m_RecordModelGenerator.ModelLocalization += recGeneratorLocalization; m_LocalizationData = conf[CONFIG_LOCALIZATION_SECTION]; var msgFile = m_LocalizationData.AttrByName(CONFIG_MSG_FILE_ATTR).Value; if (msgFile.IsNotNullOrWhiteSpace()) try { m_LocalizationData = Configuration.ProviderLoadFromFile(msgFile).Root; } catch(Exception fileError) { throw new WaveException(StringConsts.CONFIG_PORTAL_LOCALIZATION_FILE_ERROR.Args(m_Name, msgFile, fileError.ToMessageWithType()), fileError); } }