public Type TypeFromTag(string tag)
        {
            Type type;

            tag = YamlNode.ExpandTag(tag);
            if (!aliasTagToType.TryGetValue(tag, out type))
            {
                if (types.ContainsKey(tag))
                {
                    return(types[tag][0].GetTypeOfValue());
                }
            }

            return(type);
        }
        /// <summary>
        /// Decode <paramref name="text"/> and returns actual value in C# object.
        /// </summary>
        /// <param name="node">Node to be decoded.</param>
        /// <param name="obj">Decoded value.</param>
        /// <returns>True if decoded successfully.</returns>
        public bool Decode(YamlScalar node, out object obj)
        {
            obj = null;
            if (node.Tag == null || node.Value == null)
            {
                return(false);
            }
            var tag = YamlNode.ExpandTag(node.Tag);

            if (!types.ContainsKey(tag))
            {
                return(false);
            }
            foreach (var rule in types[tag])
            {
                var m = rule.Pattern.Match(node.Value);
                if (m.Success)
                {
                    obj = rule.Decode(m);
                    return(true);
                }
            }
            return(false);
        }