コード例 #1
0
        public bool ReadNextArgument(out object value)
        {
            if (!ReadNextArgument())
            {
                value = null;
                return(false);
            }

            if (_reader.Name != XmlSerializer.ArgumentElementName)
            {
                throw new NotImplementedException();
            }

            if (_reader.IsEmptyElement && !_reader.HasAttributes)
            {
                value = null;
                return(true);
            }

            var  count = _reader.AttributeCount;
            Type type  = null;

            for (int i = 0; i < count; ++i)
            {
                _reader.MoveToAttribute(i);
                switch (_reader.Name)
                {
                case XmlSerializer.TypeAttributeName:
                    type = TypeResolver.GetType(_reader.Value, true);
                    break;
                }
            }

            if (type == null)
            {
                throw new NotImplementedException();
            }

            _reader.Read();
            if (_reader.Name != XmlSerializer.ValueName)
            {
                throw new NotImplementedException();
            }

            var methods = _methodStorage.GetOrAdd(type);

            value = methods.ReadObjectDelegate(_reader, _serializer, _endPoint);

            _reader.MoveToElement();
            _reader.Read();
            return(true);
        }
コード例 #2
0
 /// <inheritdoc />
 public void RegisterType(Type type)
 {
     Log.DebugFormat("Registering type '{0}'", type);
     _methodStorage.GetOrAdd(type);
     Log.DebugFormat("Type '{0}' successfully registered", type);
 }