예제 #1
0
        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");
        }
예제 #2
0
        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);
        }
예제 #3
0
        /// <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();
        }
예제 #4
0
        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");
        }
예제 #5
0
        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");
        }
예제 #6
0
        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);
        }
예제 #7
0
        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);
        }
예제 #8
0
 public Serializer(SerializationOptions options = SerializationOptions.None, INamingConvention namingConvention = null, YamlAttributeOverrides overrides = null)
 {
     backwardsCompatibleConfiguration = new BackwardsCompatibleConfiguration(options, namingConvention, overrides);
 }
예제 #9
0
            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();
            }
예제 #10
0
        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");
        }
예제 #11
0
        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");
        }
예제 #12
0
        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");
        }
예제 #13
0
        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);
        }