/// <summary> /// Maps a specified <see cref="CodeSnippetElement"/> to the newly created <see cref="Snippet"/>. /// </summary> /// <param name="element">A <see cref="CodeSnippetElement"/> that contains deserialized snippet data.</param> /// <returns>Newly created <see cref="Snippet"/>.</returns> /// <exception cref="ArgumentNullException"><paramref name="element"/> is <c>null</c>.</exception> public static Snippet MapFromElement(CodeSnippetElement element) { if (element == null) { throw new ArgumentNullException(nameof(element)); } var snippet = new Snippet(); if (element.Format != null && Version.TryParse(element.Format, out Version version) && ValidationHelper.IsValidVersion(version)) { snippet.FormatVersion = version; } if (element.Header != null) { LoadHeaderElement(element.Header, snippet); } if (element.Snippet != null) { LoadSnippetElement(element.Snippet, snippet); } return(snippet); }
/// <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; } } } } }
/// <summary> /// Initializes a new instance of the <see cref="SerializationContext"/> class with a specified code snippet and and settings. /// </summary> /// <param name="snippet">A <see cref="Snippet"/> instance to serialize.</param> /// <param name="settings">A <see cref="SaveSettings"/> that enables to modify code snippet serialization process.</param> public SerializationContext(Snippet snippet, SaveSettings settings) { Snippet = snippet; Settings = settings; Element = new CodeSnippetElement(); }