Пример #1
0
        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);
        }
Пример #2
0
        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;
        }
Пример #3
0
        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;
        }