gpt4 book ai didi

c# - 创建继承的响应对象

转载 作者:太空宇宙 更新时间:2023-11-03 22:41:22 25 4
gpt4 key购买 nike

我正在编写与第三方电子学习平台的一些集成,该平台根据我的 restful API 调用的功能返回不同模式的各种响应。由于这些响应以几种不同的模式返回,我正在尝试创建一系列响应对象类,它们继承了一个基本 Response 对象类,该对象类将包含常见的 JSON 部分(又名“数据”和“message") 并允许每个单独的响应对象根据返回的响应覆盖或具有其他成员/类。

以下是模式可能有何不同的几个示例。

类创建返回:

{
"data": [
{
"row_index": 0,
"success": true,
"message": "string"
}
]
}

用户创建返回:

{
"data": [
{
"message": [
{
"id": "string",
"message": "string"
}
],
"success": true,
"user_id": 0
}
]
}

如您所见,不同的响应具有不同的架构。 Class Create 仅在数据对象中返回一个 message 成员,而 User Create 则有一个单独的 message 对象。

由于歧义,我不能在每个对象中有一个名为 data 的类,我想我需要创建一个包含公共(public)成员并允许我覆盖或根据需要即时添加。

我尝试创建一个基类:

public class BaseResponse
{
public List<Data> data;
public class Data
{
public bool success { set; get; }
}
}

以及一个示例派生类:

public class ClassroomResponse : BaseResponse
{
public class Data
{
public int row_index { get; set; }
public string message { get; set; }
}
}

我不确定这是否只适用于函数而不适用于我在上面尝试做的类?有没有办法向派生对象添加额外的成员(row_indexmessage 不是所有响应的成员,所以我希望能够根据需要获取它们)

最佳答案

您可以为每种类型创建单独的、不同的类,这可能是此处的正确选项,具体取决于您未显示的其他变体。或者您可以使用泛型。有几种方法可以做到这一点,但这里有一种方法可以做到。

整体响应的基类:

public abstract class Response<TData>
{
[JsonProperty("data")]
public TData Data { get; set; }
}

数据对象的基类:

public abstract class BaseData<TMessage>
{
[JsonProperty("success")]
public bool Success { get; set; }
[JsonProperty("message")]
public TMessage Message { get; set; }
}

创建类的响应类型:

public class ClassData : BaseData<string>
{
[JsonProperty("row_index")]
public int RowIndex { get; set; }
}

用户创建的响应类型:

public class UserData : BaseData<UserMessage>
{
[JsonProperty("user_id")]
public int UserId { get; set; }
}

public class UserMessage
{
[JsonProperty("id")]
public int Id { get; set; }
[JsonProperty("message")]
public string Message { get; set; }
}

最后是总体响应类型:

public class ClassResponse : Response<ClassData>
{ }

public class UserResponse : Response<UserData>
{ }

现在您可以像往常一样使用这些对象了:

var classData = new ClassResponse {Data = new ClassData {Message = ""}};
var classJson = JsonConvert.SerializeObject(classData);

var userData = new UserResponse {Data = new UserData {Message = new UserMessage {Message = ""}}};
var userJson = JsonConvert.SerializeObject(userData);

关于c# - 创建继承的响应对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52087998/

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