在运行时动态地将数组添加到资源中

时间:2019-04-12 15:14:48

标签: c# odata restier

我有一个自定义ODataResourceSerializer,在某些情况下,它可以为资源添加新的属性,效果很好。

我正在尝试添加一个新的简单int []属性

该资源是动态资源,它在运行时注册,并且在模型上没有这些属性。

此代码

case TypeX tx:

  propertiesToReturn.Add(new ODataProperty()
     {
        Name = "TypeX",
        Value = new ODataCollectionValue()
        {
           Items = new int[] {1,2,3}
        }
     });

将资源发送到ODataJsonLightPropertySerializer.WriteCollectionProperty

给我
  

该模型无法解析名为'System.Int32 []'的类型。模型可用时,每个类型名称都必须解析为有效类型。

,并且在尝试将值直接添加到odata属性时

new ODataProperty()
{
    Value = new int[] { 1, 2, 3 }   
}

我继续添加

  

使用类型为'System.Int32 []'的值实例化了ODataPrimitiveValue。 ODataPrimitiveValue只能包装可以表示为原始EDM类型的值

我尝试将int []添加到模型构建器 我尝试将类型添加到ODataCollectionValue

1 个答案:

答案 0 :(得分:0)

使用ODataUntypedValue解决,并根据返回类型“ XML / JSON”对值进行序列化

例如

Value = new ODataUntypedValue
{                            
    RawValue = JsonConvert.SerializeObject(new int[] { 1, 2, 3 })
}