public void ConvertNullableEnumUsingDefaultRepresent() { Assert.IsTrue(NullableEnumConverter.IsNullableEnum(typeof(TestEnum?))); TestEnum?origin = TestEnum.Enum2; var converted = ConvertNullable(origin); Assert.IsNotNull(converted); Assert.AreEqual(origin, converted); var nil = ConvertNullable <TestEnum?>(null); Assert.IsNull(nil); }
protected override void Parse(EnumConvertionAttribute attribute, TypeMetadata typeMetadata, MemberMetadata memberMetadata) { if (attribute != null) { if ((memberMetadata.Attributes & MemberAttributes.Unmappable) == MemberAttributes.Unmappable) throw new OhmSharpInvalidSchemaException(typeMetadata.Type, memberMetadata.Name, string.Format("Member {0} of {1} cannot be marked with EnumConvertion.", memberMetadata.Name, typeMetadata.Type.FullName)); if ((memberMetadata.Attributes & MemberAttributes.Ignored) == MemberAttributes.Ignored) throw new OhmSharpInvalidSchemaException(typeMetadata.Type, memberMetadata.Name, string.Format("Member {0} of {1} cannot be marked with both EnumConvertion and MappingIgnore.", memberMetadata.Name, typeMetadata.Type.FullName)); if (!EnumConverter.IsEnum(memberMetadata.Type) && !NullableEnumConverter.IsNullableEnum(memberMetadata.Type)) throw new OhmSharpInvalidSchemaException(typeMetadata.Type, string.Format("Member {0} of {1} not of type Enum cannot be marked with EnumConvertion.", memberMetadata.Name, typeMetadata.Type.FullName)); memberMetadata.Attributes |= MemberAttributes.Mapped; memberMetadata.FormatProvider = attribute.ConvertionInfo; } }