示例#1
0
        /// <summary>
        /// Get serializer for tagged classes.
        /// </summary>
        /// <param name="assembly">Assembly to scan.</param>
        /// <param name="tagName">Tag.</param>
        /// <param name="mainType">Main type.</param>
        /// <returns>Serializer.</returns>
        public static XmlSerializer GetSerializer
        (
            Assembly assembly,
            string tagName,
            Type mainType)
        {
            ArgumentUtility.NotNull
            (
                assembly,
                "assembly");
            ArgumentUtility.NotNullOrEmpty
            (
                tagName,
                "tagName");
            ArgumentUtility.NotNull
            (
                mainType,
                "mainType");

            _CreateSerializers();
            lock ( _serializers )
            {
                XmlSerializer ser = _serializers [tagName];

                if (ser != null)
                {
                    return(ser);
                }

                Type[] xtraTypes = TaggedClassesCollector.Collect
                                   (
                    assembly,
                    tagName);

                ser = new XmlSerializer
                      (
                    mainType,
                    xtraTypes);
                _serializers.Add
                (
                    tagName,
                    ser);

                return(ser);
            }
        }
示例#2
0
        /// <summary>
        /// Get serializer for tagged classes. Scan all assemblies.
        /// </summary>
        /// <param name="tagName">Tag.</param>
        /// <param name="mainType">Main type.</param>
        /// <returns>Serializer.</returns>
        public static XmlSerializer GetSerializer
        (
            string tagName,
            Type mainType)
        {
            ArgumentUtility.NotNullOrEmpty
            (
                tagName,
                "tagName");
            ArgumentUtility.NotNull
            (
                mainType,
                "mainType");

            _CreateSerializers();
            lock ( _serializers )
            {
                if (_serializers.ContainsKey(tagName))
                {
                    return(_serializers [tagName]);
                }

                Type[] xtraTypes = TaggedClassesCollector.Collect(tagName);

                XmlSerializer ser = new XmlSerializer
                                    (
                    mainType,
                    xtraTypes);
                _serializers.Add
                (
                    tagName,
                    ser);

                return(ser);
            }
        }