public override IEnumerable <IPropertyDescriptor> GetProperties(Type type, object container) { return(from p in (from p in innerTypeDescriptor.GetProperties(type, container) where p.GetCustomAttribute <YamlIgnoreAttribute>() == null select p).Select((Func <IPropertyDescriptor, IPropertyDescriptor>) delegate(IPropertyDescriptor p) { PropertyDescriptor propertyDescriptor = new PropertyDescriptor(p); YamlMemberAttribute customAttribute = p.GetCustomAttribute <YamlMemberAttribute>(); if (customAttribute != null) { if (customAttribute.SerializeAs != null) { propertyDescriptor.TypeOverride = customAttribute.SerializeAs; } propertyDescriptor.Order = customAttribute.Order; propertyDescriptor.ScalarStyle = customAttribute.ScalarStyle; if (customAttribute.Alias != null) { propertyDescriptor.Name = customAttribute.Alias; } } return propertyDescriptor; }) orderby p.Order select p); }
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); }