.net 如何在OData中创建自定义值类型?
我有一个ODataAPI,我想知道添加对自定义值类型/strong类型对象的支持的正确方法是什么,以便在序列化、解序列化和元数据生成过程中识别它 例如,假设我有一个自定义的.net 如何在OData中创建自定义值类型?,.net,odata,type-safety,value-type,.net,Odata,Type Safety,Value Type,我有一个ODataAPI,我想知道添加对自定义值类型/strong类型对象的支持的正确方法是什么,以便在序列化、解序列化和元数据生成过程中识别它 例如,假设我有一个自定义的温度类型,它能够解析字符串,如32°F,50F(无度数符号),40°C(摄氏度)等,具体取决于值和刻度,在类中设置了一个内部值,以便以后可以将其与其他温度实例进行比较 现在,我希望能够在OData模型中公开类型为Temperature的属性,并使其行为类似于自定义字符串类型。它应该 发布数据时,能够从文本表示反序列化 在获取
温度
类型,它能够解析字符串,如32°F
,50F
(无度数符号),40°C
(摄氏度)等,具体取决于值和刻度,在类中设置了一个内部值,以便以后可以将其与其他温度
实例进行比较
现在,我希望能够在OData模型中公开类型为Temperature
的属性,并使其行为类似于自定义字符串类型。它应该
- 发布数据时,能够从文本表示反序列化
- 在获取数据时能够序列化为文本表示形式
- 可以在筛选器表达式中作为字符串形式使用
- 可以用作复合键的一部分,也可以用作主键本身
DateTime
或spatial类型
有没有一种方法可以添加对像这样的自定义类/结构的支持,如果有,怎么做?对于当前未以本机方式处理的.Net类型也是如此,例如
Uri
您是否有幸解决此问题?我在尝试使用ulid作为ODataI的主键时遇到了相同的问题。请看您已经回答了我创建的问题。我以前做过一些自定义类型的工作,但它非常粗糙:您必须依赖ISpatial
的虚拟实现,并使用另一个我现在不记得的自定义接口将值作为值类型处理。总而言之,显然不是API的预期用途。我花了一点时间浏览ASP.NET核心OData源代码,不幸的是,目前似乎没有允许使用自定义基元类型的扩展点。据我所知,这个类中的一个私有静态字典中包含了原语类型的完整列表:您是否有幸解决了这个问题?我在尝试使用ulid作为ODataI的主键时遇到了相同的问题。请看您已经回答了我创建的问题。我以前做过一些自定义类型的工作,但它非常粗糙:您必须依赖ISpatial
的虚拟实现,并使用另一个我现在不记得的自定义接口将值作为值类型处理。总而言之,显然不是API的预期用途。我花了一点时间浏览ASP.NET核心OData源代码,不幸的是,目前似乎没有允许使用自定义基元类型的扩展点。据我所知,基本类型的完整列表包含在此类的私有静态字典中: