C# 如何在动态Odata对象上设置枚举值

C# 如何在动态Odata对象上设置枚举值,c#,asp.net-web-api,odata,C#,Asp.net Web Api,Odata,我有一个ODATA服务,它返回一个类似以下内容的动态对象: 填充对象属性时,我执行以下操作: var entityCategory = new EdmEntityObject(entityType); bool bSuccess = entityCategory.TrySetPropertyValue("Name", "Category 1"); 这很好,但我无法设置任何枚举属性的值。以下是我尝试过的: var edmValue= new EdmEnumValue( new EdmEnum

我有一个ODATA服务,它返回一个类似以下内容的动态对象:

填充对象属性时,我执行以下操作:

 var entityCategory = new EdmEntityObject(entityType);
 bool bSuccess = entityCategory.TrySetPropertyValue("Name", "Category 1");
这很好,但我无法设置任何枚举属性的值。以下是我尝试过的:

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,但它似乎可以工作。它实际上将接受并显示StrengumValue的任何字符串值

这些都不管用 更多信息:

将枚举添加到数据模型时,我会执行以下操作:

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。任何帮助都将不胜感激

参考敌人
EdmEnumType

您应该了解如何创建成员并将其添加到
enumType

//make sure you enum type is not nullable
var enumType = new EdmEnumType(Namespace, "Status", EdmCoreModel.Instance.GetInt32(false).PrimitiveDefinition(), false);

//enum members are made up of constants
var enumMember = enumType.AddMember("Active", new EdmIntegerConstant(0));

//You should also not make the value nullable
var edmValue = new EdmEnumValue(new EdmEnumTypeReference(enumType, false), enumMember);

您缺少了一些可能有帮助的变量。显示您的
enumType
value
声明。添加了更多代码..很高兴回答任何其他问题谢谢您的帮助,我最终找到了答案。我不确定你的回答是否有用,但它至少让我有了再试一次的意愿。