gpt4 book ai didi

c# - 使用 C# 动态更改类型

转载 作者:行者123 更新时间:2023-11-30 20:27:17 24 4
gpt4 key购买 nike

我是 C# 和 ServiceStack 的新手,我正在开发一个小项目,该项目包括调用第三方 API 并将我从 API 返回的数据通过 ServiceStack 的 ORMLite 加载到关系数据库中。

想法是让 API 的每个端点都有一个可重用的模型,该模型确定应如何在 API 的响应中接收它,以及应如何将其插入数据库。

所以我有如下内容:

    [Route("/api/{ApiEndpoint}", "POST")]
public class ApiRequest : IReturn<ApiResponse>
{
public Int32 OrderId { get; set; }
public DateTime PurchaseDate { get; set; }
public String ApiEndpoint { get; set; }
}

public class ApiResponse
{
public Endpoint1[] Data { get; set; }
public String ErrorCode { get; set; }
public Int32 ErrorNumber { get; set; }
public String ErrorDesc { get; set; }
}

public class Endpoint1
{
[AutoIncrement]
public Int32 Id { get; set; }

[CustomField("DATETIME2(7)")]
public String PurchaseDate { get; set; }

[CustomField("NVARCHAR(50)")]
public String Customer { get; set; }

[CustomField("NVARCHAR(20)")]
public String PhoneNumber { get; set; }

public Int32 Amount { get; set; }
}

我的第一个类代表 API 的请求及其路由,第二个类代表 API 的响应。 API 的响应对于所有端点都是相同的,但唯一不同的是 Data 的结构。从该端点返回的字段。我已经在我的 Endpoint1 中定义了我的端点之一的结构。类,我在我的 API 的响应类中使用它。如您所见,我还在 Endpoint1 上定义了一些属性类以帮助 ORM 稍后在插入数据时做出更好的决策。

好的,所以问题是我有大约 15 个端点,我不想创建 15 个 ApiResponse当我知道唯一改变的是第一个Data类中的字段。

所以我做了这样的事情:

public class DataModels
{
public Type getModel(String endpoint)
{
Dictionary<String, Type> models = new Dictionary<String, Type>();

models.Add("Endpoint1", typeof(Endpoint1));
// models.Add("Endpoint2", typeof(Endpoint2));
// models.Add("Endpoint3", typeof(Endpoint3));
// and so forth...

return models[endpoint];
}

}

我想要 getModel()在发出请求时调用,以便我可以传入 ApiEndpoint ApiRequest 中的字段分类并存储我想要的类型 Data字段,以便我可以在我的 ApiResponse 中动态更改它类(class)。

此外,还有 ORM 部分,我在其中迭代每个端点并使用每个端点的模型/类型创建不同的表。像这样:

endpoints.ForEach(
(endpoint) =>
{
db.CreateTableIfNotExists<Endpoint1>();
// inserting data, doing other work etc
}
);

但我还是希望能够调用 getModel()在这里和那里定义我正在迭代的特定端点的模型。

我试过调用 getModel()在这两个地方,但我总是得到类似 cannot use variable as a type 的错误和其他人……所以我肯定做错了什么。

欢迎提出不同的方法来处理 getModel() .这正是我想到的,但我可能忽略了一种更简单的方法。

最佳答案

当我正确地理解你时,你有不同的 API 调用,它们都返回相同的对象。唯一的区别是,字段“Data”可以有不同的类型。

然后你可以简单地将数据的类型更改为对象:

public object Data { get; set; }

然后简单地将其转换为所需的对象:

var data1=(Endpoint1[]) response.Data;

关于c# - 使用 C# 动态更改类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48823074/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com