首页 > 解决方案 > 如何在 .NET 中使用 OData 客户端处理未知类方案

问题描述

我正在 .NET Core 中构建一个应用程序,它连接到许多外部 OData 提供程序(Microsoft Dynamics Business Central 实例)。我们已经为 Business Central 建立了一个框架,当从一个数据源连接到另一个数据源时,该框架不会改变。为此,我使用 OData Connected Service 生成了一个代理,并勾选了所有不会更改的必需数据实体。它很好地生成了它们的 .NET 对象。

我的问题是,您对处理设计时未知类有什么建议?我必须使用自己的 DTO 将值转发到 HTTP Rest API。我可以以某种方式Dictionary从属性中获得 a 吗?有可能Microsoft.OData.Client.DataServiceContext吗?

来自数据源的示例:

DataSource 1

Entity - Foo
         Property - AwesomeProperty : int


DataSource 2

Entity - Foo
         Property - AnotherAwesomeProperty : string
         Property - AwesomeProperty : string

DataSource 3

Entity - Bar
         Property - AFooBarProperty : decimal

查询的预期结果:

// Query DataSource 1
Dictionary<string, object>()
{
    Key: "AwesomeProperty" , Value : 15
}

// Query DataSource 2
Dictionary<string, object>()
{
    Key: "AnotherAwesomeProperty" , Value : "StackOverflow rocks!"
    Key: "AwesomeProperty" , Value : "In this datasource, I am a string!"
}

// Query DataSource 3
Dictionary<string, object>()
{
    Key: "AFooBarProperty" , Value : 3.147
}

标签: c#.net-coredynamicodata

解决方案


简单的回答:你不能用那个库来做到这一点。我所知道的。

但是,您可以SimpleODataClient改用它,它也支持未知模式。它在进行查询时解析元数据,并Dictionary<string,object>根据 $metadata 返回具有正确映射的对象类型(int、string 等)的 a。

如果 $metadata 仍然可以更改,我建议您使用 HTTPClient,并实现自己的服务。


推荐阅读