Asp.net web api 如何将ODataEnumValue转换为其CLR枚举类型?
从Asp.net web api 如何将ODataEnumValue转换为其CLR枚举类型?,asp.net-web-api,odata,Asp.net Web Api,Odata,从FilterQueryOption遍历表达式树时,我有一个ODataEnumValue的实例。我想知道如何以通用方式将其转换为相应的CLR枚举类型值(即,无需自己查找实际的CLR类型)。也许您可以参考的ReadInline方法,如果ODataEnumvalue位于EdmModel中,则将其转换为CLR枚举类型。可以通过获取TypeReference的CLRType注释来检索枚举类型,如下所示。首先从过滤器查询选项实例获取模型: IEdmModel _model = filterQueryOpt
FilterQueryOption
遍历表达式树时,我有一个ODataEnumValue
的实例。我想知道如何以通用方式将其转换为相应的CLR枚举类型值(即,无需自己查找实际的CLR类型)。也许您可以参考的ReadInline方法,如果ODataEnumvalue位于EdmModel中,则将其转换为CLR枚举类型。可以通过获取TypeReference
的CLRType注释来检索枚举类型,如下所示。首先从过滤器查询选项
实例获取模型:
IEdmModel _model = filterQueryOption.Context.Model;
然后,稍后在解析其过滤器克劳斯
时,例如对于常量节点
:
private object GetClrValue(ConstantNode constantNode)
{
ODataEnumValue enumValue;
...
else if ((enumValue = constantNode.Value as ODataEnumValue) != null)
{
var annotation = _model.GetAnnotationValue<ClrTypeAnnotation>(constantNode.TypeReference.Definition);
Type enumType = annotation.ClrType;
parameterValue = Enum.Parse(enumType, enumValue.Value);
}
...
}
私有对象GetClrValue(ConstantNode ConstantNode)
{
ODataEnumValue枚举值;
...
else如果((enumValue=constantNode.Value作为ODataEnumValue)!=null)
{
var annotation=\u model.GetAnnotationValue(constantNode.TypeReference.Definition);
类型enumType=annotation.ClrType;
parameterValue=Enum.Parse(enumType,enumValue.Value);
}
...
}
我没有反序列化上下文。我正在尝试从使用ODataQueryOptions
在ODataController
中创建的FilterQueryOption
实例检索CLR枚举类型。