Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何在OData中创建自定义值类型?_.net_Odata_Type Safety_Value Type - Fatal编程技术网

.net 如何在OData中创建自定义值类型?

.net 如何在OData中创建自定义值类型?,.net,odata,type-safety,value-type,.net,Odata,Type Safety,Value Type,我有一个ODataAPI,我想知道添加对自定义值类型/strong类型对象的支持的正确方法是什么,以便在序列化、解序列化和元数据生成过程中识别它 例如,假设我有一个自定义的温度类型,它能够解析字符串,如32°F,50F(无度数符号),40°C(摄氏度)等,具体取决于值和刻度,在类中设置了一个内部值,以便以后可以将其与其他温度实例进行比较 现在,我希望能够在OData模型中公开类型为Temperature的属性,并使其行为类似于自定义字符串类型。它应该 发布数据时,能够从文本表示反序列化 在获取

我有一个ODataAPI,我想知道添加对自定义值类型/strong类型对象的支持的正确方法是什么,以便在序列化、解序列化和元数据生成过程中识别它

例如,假设我有一个自定义的
温度
类型,它能够解析字符串,如
32°F
50F
(无度数符号),
40°C
(摄氏度)等,具体取决于值和刻度,在类中设置了一个内部值,以便以后可以将其与其他
温度
实例进行比较

现在,我希望能够在OData模型中公开类型为
Temperature
的属性,并使其行为类似于自定义字符串类型。它应该

  • 发布数据时,能够从文本表示反序列化
  • 在获取数据时能够序列化为文本表示形式
  • 可以在筛选器表达式中作为字符串形式使用
  • 可以用作复合键的一部分,也可以用作主键本身
我在OData.Net库中找不到任何明确的扩展点,也没有听说OASIS规范中有这样的支持

我知道.Net中的一些内置类型在本机上实现了这种支持,比如
DateTime
或spatial类型


有没有一种方法可以添加对像这样的自定义类/结构的支持,如果有,怎么做?对于当前未以本机方式处理的.Net类型也是如此,例如
Uri

您是否有幸解决此问题?我在尝试使用ulid作为ODataI的主键时遇到了相同的问题。请看您已经回答了我创建的问题。我以前做过一些自定义类型的工作,但它非常粗糙:您必须依赖
ISpatial
的虚拟实现,并使用另一个我现在不记得的自定义接口将值作为值类型处理。总而言之,显然不是API的预期用途。我花了一点时间浏览ASP.NET核心OData源代码,不幸的是,目前似乎没有允许使用自定义基元类型的扩展点。据我所知,这个类中的一个私有静态字典中包含了原语类型的完整列表:您是否有幸解决了这个问题?我在尝试使用ulid作为ODataI的主键时遇到了相同的问题。请看您已经回答了我创建的问题。我以前做过一些自定义类型的工作,但它非常粗糙:您必须依赖
ISpatial
的虚拟实现,并使用另一个我现在不记得的自定义接口将值作为值类型处理。总而言之,显然不是API的预期用途。我花了一点时间浏览ASP.NET核心OData源代码,不幸的是,目前似乎没有允许使用自定义基元类型的扩展点。据我所知,基本类型的完整列表包含在此类的私有静态字典中: