【发布时间】:2016-09-16 13:48:04
【问题描述】:
我有一个 ODATA 服务,它返回类似于以下内容的动态对象:https://blogs.msdn.microsoft.com/leohu/2013/11/04/typeless-entity-object-support-in-webapi/
当我填充对象属性时,我会这样做:
var entityCategory = new EdmEntityObject(entityType);
bool bSuccess = entityCategory.TrySetPropertyValue("Name", "Category 1");
这很好用,但我无法设置我的任何 Enum 属性的值。这是我尝试过的:
var edmValue= new EdmEnumValue( new EdmEnumTypeReference( enumType, true ), value );
bool bSuccess = entityCategory.TrySetProperty( "Status", edmValue );
但这不起作用,我只是在响应中得到 null 。 bSuccess 是true,如果我之后调用TryGetValue,它甚至还有预期值。
但是,在 web 响应状态仍然显示为 NULL。
我尝试了很多变体,但似乎没有任何效果。
任何想法我做错了什么?
找到解决方案
这就是最终对我有用的方法:
var oEnumObject = new EdmEnumObject( enumType, strEnumValue );
entity.TrySetPropertyValue( fieldName, oEnumObject );
不知道为什么我需要使用 EdmEnumObject,但它似乎可以工作。它实际上会接受并显示 strEnumValue 的任何字符串值。
这些都不起作用
更多信息:
当我向数据模型添加枚举时,我会执行以下操作:
var enumType = new EdmEnumType( Namespace, "Status", EdmPrimitiveTypeKind.Int64, false);
enumType.AddMember( "Active", 0);
..
AddProperty( EdmStructuralProperty( this, field.Name, new EdmEnumTypeReference( thisEnum, bIsNullable ) )
我在这里缓存enumType 的值,稍后在填充时使用它(在上面的代码中)。因此,我认为enumType 是有效的。至于value,我有一些代码可以选择正确的EdmEnumMember,但我也只是尝试将它硬编码到列表中的第一个,它仍然显示为null:
var edmValue = new EdmEnumValue( new EdmEnumTypeReference( enumType, true ), enumType.Members.First() );
那到底是怎么回事?我在那里打了一个断点,它似乎有正确的值,但我在响应中得到 null。我也试过这个:
var value = new ODataEnumValue( nEnumIntValue.ToString(), enumType.FullName() );
entity.TrySetPropertyValue( col.ColumnName, value );
再次,NULL。任何帮助将不胜感激!
【问题讨论】:
-
您遗漏了一些可能有用的变量。出示您的
enumType和value声明。 -
添加了更多代码..很高兴回答任何其他问题
标签: c# asp.net-web-api odata