【发布时间】:2020-11-10 23:56:42
【问题描述】:
我在 API 上使用了一些泛型类型来返回 json 结果低于的数据
{
"apiResult": {
"dataResult": {
"accessToken": "access_token_string",
"refreshToken": "refresh_token_string"
},
"dataIsSuccess": true,
"dataError": "Service name : LoginService - No error",
"dataCustomError": "Service name : LoginService - No custom error",
"dataReturnCode": 200,
"dataCount": null
},
"apiException": "NO_ERROR_FROM_API",
"apiCustomException": "Method name : ApplicationUserLoginAsync",
"apiReturnCode": 200,
"apiIsSuccess": true
}
dataResult 是我的数据库结果模型,它是一个通用类型(它可以是令牌响应模型或产品列表)。所以我需要将此 json 模型转换为 DART 类。 我已经尝试了一些代码,但无法按照我的意愿进行操作
需要帮助。
编辑
我尝试了一些在线工具来生成 dart 类代码,但我遇到的问题是 dataResult 属性是一个通用属性,如下所示
public class DataReturn<T>
{
public T DataResult { get; set; }
public bool DataIsSuccess { get; set; }
public string DataError { get; set; }
public string DataCustomError { get; set; }
public int DataReturnCode { get; set; }
public long? DataCount { get; set; }
}
所以我上面添加的 json 对象是通用 TokenResponseModel 到 DataReturn 类的实现。
所以我需要一个解决方案。
编辑 2
添加一些关于我的问题的信息。 首先在后端,我使用的是 net core web api。
web api 响应方法(如果结果正常)使用以下通用 OkObjectResult
public class BaseControllerReturn<T>
public OkObjectResult Ok(T t, string methodFullName)
{
ApiReturn<T> apiReturn = new ApiReturn<T>
{
ApiResult = t,
ApiException = "NO_ERROR_FROM_API",
ApiCustomException = $"Method name : {methodFullName}",
ApiReturnCode = (int)ApiMessageType.CAM200,
ApiIsSuccess = true
};
return new OkObjectResult(apiReturn);
}
}
和 ApiResult 类是
public class ApiReturn<T> : IApiReturn<T>
{
public T ApiResult { get; set; }
public string ApiException { get; set; }
public string ApiCustomException { get; set; }
public int ApiReturnCode { get; set; }
public bool ApiIsSuccess { get; set; }
}
Web Api 控制器操作方法返回如下
IDataReturn<ICollection<SomeEntity>> dataReturn;
var controllerReturn = new BaseControllerReturn<IDataReturn<ICollection<SomeEntity>>>();
....
....
....
return controllerReturn.Ok(dataReturn, ControllerName + " - " + MethodFullName);
DataReturn类你可以在上面看到。
所以 Web Api 方法在 DataReturn 泛型类中返回 DB 结果,Api 方法在 ApiResult 中返回 DataReturn 对象,我有如下 Api Return 对象
ApiReturn
{
"apiResult": {
"dataResult": {
"accessToken": "access_token_string",
"refreshToken": "refresh_token_string"
},
"dataIsSuccess": true,
"dataError": "Service name : LoginService - No error",
"dataCustomError": "Service name : LoginService - No custom error",
"dataReturnCode": 200,
"dataCount": null
},
"apiException": "NO_ERROR_FROM_API",
"apiCustomException": "Method name : ApplicationUserLoginAsync",
"apiReturnCode": 200,
"apiIsSuccess": true
}
在这个例子中 SomeEntity 是
public class TokenResponseModel
{
public string AccessToken { get; set; }
public string RefreshToken { get; set; }
}
所以我希望这些信息足以澄清问题。
编辑 3:
来自使用相同 ApiResult 和 DataResult 泛型类的 Web api 的另一个响应。
{
"apiResult": {
"dataResult": [
{
"stockDetailId": "ac9d6aac-3b0e-42f7-ba87-85cf6647cde9",
"stockDetail": {
"stockId": "8802d1e0-b044-4986-9e44-74f68fe2068e",
"secondCurrency": 0,
"thirdCurrency": 0,
"retailVatType": 4,
"ecommerce": false,
"description": null,
"id": "ac9d6aac-3b0e-42f7-ba87-85cf6647cde9",
"isActive": true,
"createdUser": "ed086e08-fbdf-4974-d566-08d7cb0d5a98",
"createdDate": "2020-07-25T14:15:42.0056828",
"updatedUser": "ed086e08-fbdf-4974-d566-08d7cb0d5a98",
"updatedDate": "2020-07-25T14:15:42.0056828"
},
"vendorId": null,
"vendor": null,
"manufacturerId": null,
"manufacturer": null,
"priceListId": null,
"priceList": null,
"discountMatrixId": null,
"discountMatrix": null,
"stockEcommerceId": null,
"stockEcommerce": null,
"stockOpenCarts": null,
"stockUnits": null,
"stockBarcodes": null,
"stockGroups": null,
"stockCategories": null,
"stockFiles": null,
"accountMatchings": null,
"code": "334472",
"name": "YETIS MATIK DAG ESINTISI 2500GR*6",
"currencyType": 1,
"vatType": 4,
"sellingPrice": null,
"id": "8802d1e0-b044-4986-9e44-74f68fe2068e",
"isActive": true,
"createdUser": "ed086e08-fbdf-4974-d566-08d7cb0d5a98",
"createdDate": "2020-07-25T14:15:42.0056828",
"updatedUser": "ed086e08-fbdf-4974-d566-08d7cb0d5a98",
"updatedDate": "2020-07-25T14:15:42.0056828"
}
],
"dataIsSuccess": true,
"dataError": "Service name : StockService - No error",
"dataCustomError": "Service name : StockService - No custom error",
"dataReturnCode": 200,
"dataCount": 1
},
"apiException": "NO_ERROR_FROM_API",
"apiCustomException": "Method name : StocksController - ListAsync",
"apiReturnCode": 200,
"apiIsSuccess": true
}
【问题讨论】:
-
这段代码甚至不像 dart。
-
是的,它不是。这是 C# API 代码。
-
那么请澄清您的问题。不清楚你在问什么。