internal static T Parse <T>(StreamReader streamReader) { var deserializer = new DeserializerBuilder(); deserializer.WithTypeConverter(new YamlTypeConverterRegex()); deserializer.WithTypeConverter(new YamlTypeConverterTupleRegexString()); deserializer.WithNodeDeserializer(inner => new ValidatingNodeDeserializer(inner), s => s.InsteadOf <ObjectNodeDeserializer>()); return(deserializer.Build().Deserialize <T>(streamReader)); }
/// <summary> /// Verifies the content of the given file, treating it as a transformation file. /// </summary> /// <param name="file">The path to the file.</param> /// <typeparam name="T">The class to verify the file as.</typeparam> /// <returns>A condition result, which may or may not have succeeded.</returns> public DetermineConditionResult VerifyFile <T>(string file) { using var sr = new StreamReader(File.OpenRead(file)); var deserB = new DeserializerBuilder() .WithTypeConverter(new ColourYamlConverter()) .WithNodeDeserializer(i => new ValidatingNodeDeserializer(i), s => s.InsteadOf <ObjectNodeDeserializer>()) .WithNamingConvention(UnderscoredNamingConvention.Instance); if (typeof(T) != typeof(Species)) { deserB = deserB.WithTypeConverter(new RawSpeciesYamlConverter()); } var deser = deserB.Build(); var content = sr.ReadToEnd(); try { deser.Deserialize <T>(content); } catch (YamlException yex) { return(DetermineConditionResult.FromError(yex, Path.GetFileName(file))); } return(DetermineConditionResult.FromSuccess()); }
/// <summary> /// Verifies the content of the given file, treating it as a transformation file. /// </summary> /// <param name="file">The path to the file.</param> /// <typeparam name="T">The class to verify the file as.</typeparam> /// <returns>A condition result, which may or may not have succeeded.</returns> public static Result VerifyFile <T>(string file) { using var sr = new StreamReader(File.OpenRead(file)); var builder = new DeserializerBuilder() .WithTypeConverter(new ColourYamlConverter()) .WithTypeConverter(new EnumYamlConverter <Pattern>()) .WithTypeConverter(new NullableEnumYamlConverter <Pattern>()) .WithNodeDeserializer(i => new ValidatingNodeDeserializer(i), s => s.InsteadOf <ObjectNodeDeserializer>()) .WithNamingConvention(UnderscoredNamingConvention.Instance); if (typeof(T) != typeof(Species)) { builder = builder.WithTypeConverter(new RawSpeciesYamlConverter()); } var deserializer = builder.Build(); var content = sr.ReadToEnd(); try { deserializer.Deserialize <T>(content); } catch (YamlException yex) { return(yex); } return(Result.FromSuccess()); }
public static IDeserializer GetDeserializer(string filePath = null) { // if (_desrializer != null) { // return _desrializer; // } var builder = new DeserializerBuilder(); builder = builder .IgnoreFields() .IgnoreUnmatchedProperties() .WithNamingConvention(CamelCaseNamingConvention.Instance); if (RegisteredTags?.Count > 0) { foreach (var t in RegisteredTags) { var type = t.GetType(); var tagKey = type.GetCustomAttributes(typeof(YamlTagAttribute), true) .FirstOrDefault() is YamlTagAttribute att ? att.TagName : null; builder = builder.WithTagMapping($"!{tagKey}", type); } builder = builder .WithTypeConverter( new FileTypeConverter(RegisteredTags, filePath), s => s.OnTop()); } // _desrializer = builder.Build(); // return _desrializer; return(builder.Build()); }
public void RoundtripWithYamlTypeConverter() { var obj = new MissingDefaultCtor("Yo"); SerializerBuilder .EnsureRoundtrip() .WithTypeConverter(new MissingDefaultCtorConverter()); DeserializerBuilder .WithTypeConverter(new MissingDefaultCtorConverter()); var result = DoRoundtripFromObjectTo <MissingDefaultCtor>(obj, Serializer, Deserializer); result.Value.Should().Be("Yo"); }
public static T Deserialize <T>(TextReader reader, bool ignoreUnmatchedProperties = true, IYamlTypeConverter converter = null) { DeserializerBuilder builder = new DeserializerBuilder(); if (ignoreUnmatchedProperties) { builder.IgnoreUnmatchedProperties(); } if (converter != null) { builder.WithTypeConverter(converter); } Deserializer deserializer = builder.Build() as Deserializer; return(deserializer.Deserialize <T>(reader)); }
/// <summary> /// Deserializes a transformation object from the given file. The file is assumed to exist and be valid. /// </summary> /// <param name="file">The file.</param> /// <typeparam name="T">The transformation object type.</typeparam> /// <returns>The object.</returns> protected T Deserialize <T>(string file) { using var sr = new StreamReader(File.OpenRead(file)); var deserB = new DeserializerBuilder() .WithTypeConverter(new ColourYamlConverter()) .WithNodeDeserializer(i => new ValidatingNodeDeserializer(i), s => s.InsteadOf <ObjectNodeDeserializer>()) .WithNamingConvention(UnderscoredNamingConvention.Instance); if (typeof(T) != typeof(Species)) { deserB = deserB.WithTypeConverter(new RawSpeciesYamlConverter()); } var deser = deserB.Build(); var content = sr.ReadToEnd(); return(deser.Deserialize <T>(content)); }
internal static ConfigurationStore CreateConfigurationStore([NotNull] string entryFilePath, [NotNull] BasePluginManager pluginManager) { var typeConverterFactories = pluginManager.GetPluginsOfType <IConfigTypeConverterFactory>(); var deserializerBuilder = new DeserializerBuilder() .IgnoreUnmatchedProperties() .WithNamingConvention(new UnderscoredNamingConvention()); // External converters foreach (var factory in typeConverterFactories) { var converter = factory.CreateTypeConverter(); deserializerBuilder.WithTypeConverter(converter); } var deserializer = deserializerBuilder.Build(); return(ConfigurationStore.Load(entryFilePath, deserializer)); }
public static T Deserialize <T>(string yaml, bool ignoreUnmatchedProperties = true, IYamlTypeConverter converter = null) { using (StringReader reader = new StringReader(yaml)) { DeserializerBuilder builder = new DeserializerBuilder(); if (ignoreUnmatchedProperties) { builder.IgnoreUnmatchedProperties(); } if (converter != null) { builder.WithTypeConverter(converter); } Deserializer deserializer = builder.Build(); return(deserializer.Deserialize <T>(reader)); } }
internal static ConfigurationStore CreateConfigurationStore([NotNull] BasePluginManager pluginManager) { var typeConverterFactories = pluginManager.GetPluginsOfType <IConfigTypeConverterFactory>(); var deserializerBuilder = new DeserializerBuilder() .WithTypeInspector(inspector => new DataContractTypeInspector(inspector) { NamingConvention = new UnderscoredNamingConvention(), DataMemberSerialization = DataMemberSerialization.OptIn }) .IgnoreUnmatchedProperties(); // External converters foreach (var factory in typeConverterFactories) { var converter = factory.CreateTypeConverter(); deserializerBuilder.WithTypeConverter(converter); } var deserializer = deserializerBuilder.Build(); return(TheaterDaysConfigurationStore.Load(ConfigurationEntryFile, deserializer)); }
public static T DeserializeFile <T>(string path, bool ignoreUnmatchedProperties = true, IYamlTypeConverter converter = null) where T : class { T ssc = null; using (StreamReader reader = new StreamReader(path)) { DeserializerBuilder builder = new DeserializerBuilder(); if (ignoreUnmatchedProperties) { builder.IgnoreUnmatchedProperties(); } if (converter != null) { builder.WithTypeConverter(converter); } Deserializer deserializer = builder.Build() as Deserializer; ssc = deserializer.Deserialize <T>(reader); } return(ssc); }
internal static T Read <T>(string yamlFileName, params IYamlTypeConverter[] converters) { T locale; var executingAssembly = Assembly.GetExecutingAssembly(); using (var resourceStream = executingAssembly.GetManifestResourceStream(yamlFileName)) { using (var textReader = new StreamReader(resourceStream)) { DeserializerBuilder deserializerBuilder = new DeserializerBuilder(); foreach (var converter in converters) { deserializerBuilder = deserializerBuilder.WithTypeConverter(converter); } var deserializer = deserializerBuilder .WithNamingConvention(CamelCaseNamingConvention.Instance) .Build() ; locale = deserializer.Deserialize <T>(textReader.ReadToEnd()); } } return(locale); }
private PipelineFile <TObject> LoadFile <TObject, TConverter>(String path, IDictionary <String, Object> mustacheContext, CancellationToken cancellationToken, ref Int32 fileCount) where TConverter : IYamlTypeConverter, new() { fileCount++; if (m_options.MaxFiles > 0 && fileCount > m_options.MaxFiles) { throw new FormatException(TaskResources.YamlFileCount(m_options.MaxFiles)); } cancellationToken.ThrowIfCancellationRequested(); FileData file = m_fileProvider.GetFile(path); String mustacheReplaced; StringReader reader = null; CancellationTokenSource mustacheCancellationTokenSource = null; try { // Read front-matter IDictionary <String, Object> frontMatter = null; reader = new StringReader(file.Content); String line = reader.ReadLine(); if (!String.Equals(line, "---", StringComparison.Ordinal)) { // No front-matter. Reset the reader. reader.Dispose(); reader = new StringReader(file.Content); } else { // Deseralize front-matter. cancellationToken.ThrowIfCancellationRequested(); StringBuilder frontMatterBuilder = new StringBuilder(); while (true) { line = reader.ReadLine(); if (line == null) { throw new FormatException(TaskResources.YamlFrontMatterNotClosed(path)); } else if (String.Equals(line, "---", StringComparison.Ordinal)) { break; } else { frontMatterBuilder.AppendLine(line); } } var frontMatterDeserializer = new Deserializer(); try { frontMatter = frontMatterDeserializer.Deserialize <IDictionary <String, Object> >(frontMatterBuilder.ToString()); } catch (Exception ex) { throw new FormatException(TaskResources.YamlFrontMatterNotValid(path, ex.Message), ex); } } // Merge the mustache replace context. frontMatter = frontMatter ?? new Dictionary <String, Object>(); if (mustacheContext != null) { foreach (KeyValuePair <String, Object> pair in mustacheContext) { frontMatter[pair.Key] = pair.Value; } } // Prepare the mustache options. mustacheCancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken); // var mustacheOptions = new MustacheEvaluationOptions // { // CancellationToken = mustacheCancellationTokenSource.Token, // EncodeMethod = MustacheEncodeMethods.JsonEncode, // MaxResultLength = m_options.MustacheEvaluationMaxResultLength, // }; // Parse the mustache template. cancellationToken.ThrowIfCancellationRequested(); var mustacheParser = new MustacheTemplateParser(useDefaultHandlebarHelpers: true, useCommonTemplateHelpers: true); MustacheExpression mustacheExpression = mustacheParser.Parse(template: reader.ReadToEnd()); // Limit the mustache evaluation time. if (m_options.MustacheEvaluationTimeout > TimeSpan.Zero) { mustacheCancellationTokenSource.CancelAfter(m_options.MustacheEvaluationTimeout); } try { // Perform the mustache evaluation. mustacheReplaced = mustacheExpression.Evaluate( replacementObject: frontMatter, additionalEvaluationData: null, parentContext: null, partialExpressions: null //options: mustacheOptions ); } catch (System.OperationCanceledException ex) when(mustacheCancellationTokenSource.IsCancellationRequested && !cancellationToken.IsCancellationRequested) { throw new System.OperationCanceledException(TaskResources.MustacheEvaluationTimeout(path, m_options.MustacheEvaluationTimeout.TotalSeconds), ex); } m_trace.Verbose("{0}", new TraceFileContent($"{file.Name} after mustache replacement", mustacheReplaced)); } finally { reader?.Dispose(); reader = null; mustacheCancellationTokenSource?.Dispose(); mustacheCancellationTokenSource = null; } // Deserialize DeserializerBuilder deserializerBuilder = new DeserializerBuilder(); deserializerBuilder.WithTypeConverter(new TConverter()); Deserializer deserializer = deserializerBuilder.Build(); TObject obj = deserializer.Deserialize <TObject>(mustacheReplaced); m_trace.Verbose("{0}", new TraceObject <TObject, TConverter>($"{file.Name} after deserialization ", obj)); var result = new PipelineFile <TObject> { Name = file.Name, Directory = file.Directory, Object = obj }; return(result); }