Esempio n. 1
0
        /// <summary>
        /// Returns enumerable collection of <see cref="Snippet"/> contained by a specified <see cref="Stream"/>.
        /// </summary>
        /// <param name="stream">The <see cref="Stream"/> that contains snippets to deserialize.</param>
        /// <returns>Enumerable collection of snippets being deserialized.</returns>
        /// <exception cref="ArgumentNullException"><paramref name="stream"/> is <c>null</c>.</exception>
        public static IEnumerable <Snippet> Deserialize(Stream stream)
        {
            if (stream == null)
            {
                throw new ArgumentNullException(nameof(stream));
            }

            return(Deserialize());

            IEnumerable <Snippet> Deserialize()
            {
                using (XmlReader xmlReader = XmlReader.Create(stream, XmlReaderSettings))
                {
                    while (xmlReader.Read() && xmlReader.NodeType != XmlNodeType.Element)
                    {
                    }

                    switch (xmlReader.Name)
                    {
                    case "CodeSnippet":
                    {
                        CodeSnippetElement element = Deserialize <CodeSnippetElement>(xmlReader, CodeSnippetElementXmlSerializer);

                        yield return(SnippetMapper.MapFromElement(element));

                        break;
                    }

                    case "CodeSnippets":
                    {
                        CodeSnippetsElement element = Deserialize <CodeSnippetsElement>(xmlReader, CodeSnippetsElementXmlSerializer);

                        if (element.Snippets == null)
                        {
                            break;
                        }

                        for (int i = 0; i < element.Snippets.Length; i++)
                        {
                            yield return(SnippetMapper.MapFromElement(element.Snippets[i]));
                        }

                        break;
                    }
                    }
                }
            }
        }