【问题标题】:dynamically adding an array to a resource in run time在运行时动态地将数组添加到资源中
【发布时间】:2019-09-03 09:40:33
【问题描述】:

我有一个自定义的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 添加一个类型

【问题讨论】:

    标签: c# odata restier


    【解决方案1】:

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

    例如

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

    【讨论】:

      猜你喜欢
      • 2020-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-30
      • 2011-03-08
      • 2019-10-03
      相关资源
      最近更新 更多