/// <summary> /// Adds the default converter. /// </summary> /// <param name="settings">The settings.</param> internal static void AddDefaultConverter(AjaxSettings settings) { #region Default Converters AddConverter(settings, new StringConverter()); AddConverter(settings, new PrimitiveConverter()); AddConverter(settings, new GuidConverter()); AddConverter(settings, new ExceptionConverter()); AddConverter(settings, new EnumConverter()); AddConverter(settings, new DecimalConverter()); AddConverter(settings, new NameValueCollectionConverter()); AddConverter(settings, new DateTimeConverter()); AddConverter(settings, new DataSetConverter()); AddConverter(settings, new DataTableConverter()); AddConverter(settings, new DataViewConverter()); AddConverter(settings, new IJavaScriptObjectConverter()); #if (NET20) AddConverter(settings, new ProfileBaseConverter()); #endif AddConverter(settings, new IDictionaryConverter()); AddConverter(settings, new IListConverter()); AddConverter(settings, new HashtableConverter()); AddConverter(settings, new IEnumerableConverter()); AddConverter(settings, new DataRowConverter()); AddConverter(settings, new HtmlControlConverter()); #endregion }
/// <summary> /// Removes the converter. /// </summary> /// <param name="settings">The settings.</param> /// <param name="t">The t.</param> internal static void RemoveConverter(AjaxSettings settings, Type t) { Type key; bool removed = false; IEnumerator m = settings.SerializableConverters.Keys.GetEnumerator(); while (!removed && m.MoveNext()) { key = (Type)m.Current; if (settings.SerializableConverters[key].GetType() == t) { settings.SerializableConverters.Remove(key); removed = true; } } removed = false; m = settings.DeserializableConverters.Keys.GetEnumerator(); while (!removed && m.MoveNext()) { key = (Type)m.Current; if (settings.DeserializableConverters[key].GetType() == t) { settings.DeserializableConverters.Remove(key); removed = true; } } }
/// <summary> /// Adds the converter. /// </summary> /// <param name="settings">The settings.</param> /// <param name="converter">The converter.</param> /// <param name="replace">if set to <c>true</c> [replace].</param> internal static void AddConverter(AjaxSettings settings, IJavaScriptConverter converter, bool replace) { Type t; for (int i = 0; i < converter.SerializableTypes.Length; i++) { t = converter.SerializableTypes[i]; if (settings.SerializableConverters.ContainsKey(t)) { if (replace) { settings.SerializableConverters[t] = converter; } continue; } settings.SerializableConverters.Add(t, converter); } for (int i = 0; i < converter.DeserializableTypes.Length; i++) { t = converter.DeserializableTypes[i]; if (settings.DeserializableConverters.ContainsKey(t)) { if (replace) { settings.DeserializableConverters[t] = converter; } continue; } settings.DeserializableConverters.Add(t, converter); } }
/// <summary> /// Adds the converter. /// </summary> /// <param name="settings">The settings.</param> /// <param name="converter">The converter.</param> internal static void AddConverter(AjaxSettings settings, IJavaScriptConverter converter) { AddConverter(settings, converter, false); }
/// <summary> /// Creates a configuration section handler. /// </summary> /// <param name="parent"></param> /// <param name="configContext">Configuration context object.</param> /// <param name="section"></param> /// <returns>The created section handler object.</returns> public object Create(object parent, object configContext, System.Xml.XmlNode section) { AjaxSettings settings = new AjaxSettings(); Utility.AddDefaultConverter(settings); foreach (XmlNode n in section.ChildNodes) { #if (!JSONLIB) if (n.Name == "coreScript") { if (n.InnerText != null && n.InnerText.Length > 0) { settings.ScriptReplacements.Add("core", n.InnerText); } } else if (n.Name == "scriptReplacements") { foreach (XmlNode file in n.SelectNodes("file")) { string name = ""; string path = ""; if (file.Attributes["name"] != null) { name = file.Attributes["name"].InnerText; if (file.Attributes["path"] != null) { path = file.Attributes["path"].InnerText; } if (settings.ScriptReplacements.ContainsKey(name)) { settings.ScriptReplacements[name] = path; } else { settings.ScriptReplacements.Add(name, path); } } } } else if (n.Name == "urlNamespaceMappings") { settings.OnlyAllowTypesInList = n.SelectSingleNode("@allowListOnly[.='true']") != null; settings.UseAssemblyQualifiedName = n.SelectSingleNode("@useAssemblyQualifiedName[.='true']") != null; XmlNode ns, url; foreach (XmlNode e in n.SelectNodes("add")) { ns = e.SelectSingleNode("@type"); url = e.SelectSingleNode("@path"); #if (NET20) if (ns == null || String.IsNullOrEmpty(ns.InnerText) || url == null || String.IsNullOrEmpty(url.InnerText)) #else if (ns == null || ns.InnerText.Length == 0 || url == null || url.InnerText.Length == 0) #endif { continue; } if (settings.UrlNamespaceMappings.Contains(url.InnerText)) { throw new Exception("Duplicate namespace mapping '" + url.InnerText + "'."); } settings.UrlNamespaceMappings.Add(url.InnerText, ns.InnerText); } } else if (n.Name == "providers" || n.Name == "provider") { foreach (XmlNode p in n.ChildNodes) { if (p.Name == "securityProvider") { if (p.SelectSingleNode("@type") != null) { string securityProviderType = p.SelectSingleNode("@type").InnerText; AjaxSecurity sec = new AjaxSecurity(securityProviderType); if (sec.Init()) { settings.Security = sec; } } } else if (p.Name == "typeJavaScriptProvider") { if (p.SelectSingleNode("@type") != null) { settings.TypeJavaScriptProvider = p.SelectSingleNode("@type").InnerText; } } } } else if (n.Name == "token") { // settings.TokenEnabled = n.SelectSingleNode("@enabled") != null && n.SelectSingleNode("@enabled").InnerText == "true"; settings.TokenSitePassword = n.SelectSingleNode("@sitePassword") != null?n.SelectSingleNode("@sitePassword").InnerText : settings.TokenSitePassword; } else if (n.Name == "debug") { if (n.SelectSingleNode("@enabled") != null && n.SelectSingleNode("@enabled").InnerText == "true") { settings.DebugEnabled = true; } } else if (n.Name == "contentSecurityPolicy") { var a = n.SelectSingleNode("@nonce"); if (a != null && !string.IsNullOrEmpty(a.InnerText)) { // TODO: check if that's a valid nonce settings.ContentSecurityPolicyNonce = a.InnerText; } } else if (n.Name == "jsonDeserializationCustomTypes") { settings.IsCustomTypesDeserializationDisabled = n.Attributes["default"] == null || n.Attributes["default"].InnerText.ToLower() != "allow"; foreach (XmlNode sn in n.ChildNodes) { switch (sn.Name) { case "allow": settings.JsonDeserializationCustomTypesAllowed.Add(sn.InnerText); break; case "deny": settings.JsonDeserializationCustomTypesDenied.Add(sn.InnerText); break; } } } else if (n.Name == "oldStyle" || n.Name == "configuration") { foreach (XmlNode sn in n.ChildNodes) { switch (sn.Name) { case "useSimpleObjectNaming": settings.UseSimpleObjectNaming = true; break; default: settings.OldStyle.Add(sn.Name); break; } } } else #endif if (n.Name == "jsonConverters") { if (n.SelectSingleNode("@includeTypeProperty") != null && n.SelectSingleNode("@includeTypeProperty").InnerText == "true") { settings.IncludeTypeProperty = true; } XmlNodeList jsonConverters = n.SelectNodes("add"); foreach (XmlNode j in jsonConverters) { XmlNode t = j.SelectSingleNode("@type"); if (t == null) { continue; } Type type = Type.GetType(t.InnerText); if (type == null) { // throw new ArgumentException("Could not find type " + t.InnerText + "."); continue; } if (!typeof(IJavaScriptConverter).IsAssignableFrom(type)) { // throw new ArgumentException("Type " + t.InnerText + " does not inherit from JavaScriptObjectConverter."); continue; } StringDictionary d = new StringDictionary(); foreach (XmlAttribute a in j.Attributes) { if (d.ContainsKey(a.Name)) { continue; } d.Add(a.Name, a.Value); } IJavaScriptConverter c = (IJavaScriptConverter)Activator.CreateInstance(type); c.Initialize(d); Utility.AddConverter(settings, c, true); } jsonConverters = n.SelectNodes("remove"); foreach (XmlNode j in jsonConverters) { XmlNode t = j.SelectSingleNode("@type"); if (t == null) { continue; } Type type = Type.GetType(t.InnerText); if (type == null) { // throw new ArgumentException("Could not find type " + t.InnerText + "."); continue; } Utility.RemoveConverter(settings, type); } } } return(settings); }