public void SerializationRespectsScalarStyleOverride() { var writer = new StringWriter(); var obj = new ScalarStyleExample(); var overrides = new YamlAttributeOverrides(); var style1 = new YamlMemberAttribute(); style1.ScalarStyle = ScalarStyle.DoubleQuoted; var style2 = new YamlMemberAttribute(); style2.ScalarStyle = ScalarStyle.Literal; overrides.Add(typeof(ScalarStyleExample), "LiteralString", style1); overrides.Add(typeof(ScalarStyleExample), "DoubleQuotedString", style2); var serializer = new Serializer(overrides: overrides); serializer.Serialize(writer, obj); var serialized = writer.ToString(); Dump.WriteLine(serialized); serialized.Should() .Be("LiteralString: \"Test\"\r\nDoubleQuotedString: |-\r\n Test\r\n", "the properties should be specifically styled"); }
public void RoundtripAliasOverride() { var writer = new StringWriter(); var input = new NameConvention { AliasTest = "Fourth" }; var overrides = new YamlAttributeOverrides(); var attribute = new YamlMemberAttribute(); attribute.Alias = "fourthOverride"; overrides.Add(typeof(NameConvention), "AliasTest", attribute); var serializer = new Serializer(overrides: overrides); serializer.Serialize(writer, input, input.GetType()); var text = writer.ToString(); // Todo: use RegEx once FluentAssertions 2.2 is released text.TrimEnd('\r', '\n').Should().Be("fourthOverride: Fourth"); var deserializer = new Deserializer(overrides: overrides); var output = deserializer.Deserialize <NameConvention>(UsingReaderFor(text)); output.AliasTest.Should().Be(input.AliasTest); }
/// <summary> /// /// </summary> /// <param name="options">Options that control how the serialization is to be performed.</param> /// <param name="namingConvention">Naming strategy to use for serialized property names</param> /// <param name="overrides">Yaml attribute overrides</param> public Serializer(SerializationOptions options = SerializationOptions.None, INamingConvention namingConvention = null, YamlAttributeOverrides overrides = null) { this.options = options; this.namingConvention = namingConvention ?? new NullNamingConvention(); this.overrides = overrides; Converters = new List<IYamlTypeConverter>(); foreach (IYamlTypeConverter yamlTypeConverter in Utilities.YamlTypeConverters.GetBuiltInConverters(IsOptionSet(SerializationOptions.JsonCompatible))) { Converters.Add(yamlTypeConverter); } typeResolver = IsOptionSet(SerializationOptions.DefaultToStaticType) ? (ITypeResolver)new StaticTypeResolver() : (ITypeResolver)new DynamicTypeResolver(); }
public void SerializationRespectsYamlIgnoreOverride() { var writer = new StringWriter(); var obj = new Simple(); var overrides = new YamlAttributeOverrides(); var ignore = new YamlIgnoreAttribute(); overrides.Add(typeof(Simple), "aaa", ignore); var serializer = new Serializer(overrides: overrides); serializer.Serialize(writer, obj); var serialized = writer.ToString(); Dump.WriteLine(serialized); serialized.Should().NotContain("aaa"); }
public void SerializationBaseAttributeOverride() { var writer = new StringWriter(); var obj = new Derived { DerivedProperty = "Derived", BaseProperty = "Base" }; var overrides = new YamlAttributeOverrides(); var ignore = new YamlIgnoreAttribute(); overrides.Add(typeof(Base), "BaseProperty", ignore); var serializer = new Serializer(overrides: overrides); serializer.Serialize(writer, obj); var serialized = writer.ToString(); Dump.WriteLine(serialized); serialized.Should() .Be("DerivedProperty: Derived\r\n", "the base property should be specifically ignored"); }
public void AttributeOverridesAndNamingConventionDoNotConflictInLegacyConfiguration() { var overrides = new YamlAttributeOverrides(); overrides.Add <Foo>(f => f.IsRequired, new YamlMemberAttribute { Alias = "Required" }); var namingConvention = new CamelCaseNamingConvention(); var serializer = new Serializer(namingConvention: namingConvention, overrides: overrides); var yaml = serializer.Serialize(new Foo { IsRequired = true }); Assert.Contains("required: true", yaml); var deserializer = new Deserializer(namingConvention: namingConvention, overrides: overrides); var deserializedFoo = deserializer.Deserialize <Foo>(yaml); Assert.True(deserializedFoo.IsRequired); }
public static void Add <TClass>(this YamlAttributeOverrides overrides, Expression <Func <TClass, object> > propertyAccessor, Attribute attribute) { var property = propertyAccessor.AsProperty(); overrides.Add(typeof(TClass), property.Name, attribute); }
public Serializer(SerializationOptions options = SerializationOptions.None, INamingConvention namingConvention = null, YamlAttributeOverrides overrides = null) { backwardsCompatibleConfiguration = new BackwardsCompatibleConfiguration(options, namingConvention, overrides); }
public BackwardsCompatibleConfiguration(SerializationOptions options, INamingConvention namingConvention, YamlAttributeOverrides overrides) { this.options = options; this.namingConvention = namingConvention ?? new NullNamingConvention(); this.overrides = overrides; Converters = new List<IYamlTypeConverter>(); Converters.Add(new GuidConverter(IsOptionSet(SerializationOptions.JsonCompatible))); typeResolver = IsOptionSet(SerializationOptions.DefaultToStaticType) ? (ITypeResolver)new StaticTypeResolver() : (ITypeResolver)new DynamicTypeResolver(); }
public void RoundtripAliasOverride() { var writer = new StringWriter(); var input = new NameConvention { AliasTest = "Fourth" }; var overrides = new YamlAttributeOverrides(); var attribute = new YamlMemberAttribute(); attribute.Alias = "fourthOverride"; overrides.Add(typeof(NameConvention), "AliasTest", attribute); var serializer = new Serializer(overrides: overrides); serializer.Serialize(writer, input, input.GetType()); var text = writer.ToString(); // Todo: use RegEx once FluentAssertions 2.2 is released text.TrimEnd('\r', '\n').Should().Be("fourthOverride: Fourth"); var deserializer = new Deserializer(overrides: overrides); var output = deserializer.Deserialize<NameConvention>(UsingReaderFor(text)); output.AliasTest.Should().Be(input.AliasTest); }