public void AddTypeResolver(IXmlRpcTypeResolver resolver) { if (resolvers == null) throw new ArgumentNullException("resolver"); for(int i = 0; i < resolvers.Count; i++) { if (resolvers[i].GetType() == resolver.GetType()) throw new ArgumentException("Another resolver of type '" + resolver.GetType() + "' was already present."); } resolvers.Add(resolver); }
private Type ResolveType(string elementName, out IXmlRpcTypeResolver resolver) { for(int i = 0; i < resolvers.Count; i++) { Type type; resolver = resolvers[i]; if ((type = resolver.ResolveType(elementName)) != null) { return type; } } resolver = null; return null; }
private string ResolveElementName(object value, out IXmlRpcTypeResolver resolver) { Type valueType = value is Type ? (Type) value : value.GetType(); for(int i = 0; i < resolvers.Count; i++) { string elementName; resolver = resolvers[i]; if (!String.IsNullOrEmpty(elementName = resolver.ResolveElementName(valueType))) { return elementName; } } resolver = null; return null; }