/// <inheritdoc /> public override object ReadInline(object item, IEdmTypeReference edmType, ODataDeserializerContext readContext) { if (item == null) { return(null); } if (readContext == null) { throw Error.ArgumentNull(nameof(readContext)); } ODataProperty property = item as ODataProperty; if (property != null) { item = property.Value; } IEdmEnumTypeReference enumTypeReference = edmType.AsEnum(); ODataEnumValue enumValue = item as ODataEnumValue; if (readContext.IsNoClrType) { Contract.Assert(edmType.TypeKind() == EdmTypeKind.Enum); return(new EdmEnumObject(enumTypeReference, enumValue.Value)); } IEdmEnumType enumType = enumTypeReference.EnumDefinition(); // Enum member supports model alias case. So, try to use the Edm member name to retrieve the Enum value. var memberMapAnnotation = readContext.Model.GetClrEnumMemberAnnotation(enumType); if (memberMapAnnotation != null) { if (enumValue != null) { IEdmEnumMember enumMember = enumType.Members.FirstOrDefault(m => m.Name == enumValue.Value); if (enumMember != null) { var clrMember = memberMapAnnotation.GetClrEnumMember(enumMember); if (clrMember != null) { return(clrMember); } } } } Type clrType = readContext.Model.GetClrType(edmType); return(EnumDeserializationHelpers.ConvertEnumValue(item, clrType)); }
/// <inheritdoc /> public override object ReadInline(object item, IEdmTypeReference edmType, ODataDeserializerContext readContext) { if (item == null) { return(null); } ODataProperty property = item as ODataProperty; if (property != null) { item = property.Value; } if (readContext.IsUntyped) { Contract.Assert(edmType.TypeKind() == EdmTypeKind.Enum); return(new EdmEnumObject((IEdmEnumTypeReference)edmType, ((ODataEnumValue)item).Value)); } Type clrType = EdmLibHelpers.GetClrType(edmType, readContext.Model); return(EnumDeserializationHelpers.ConvertEnumValue(item, clrType)); }