您好,我嘗試創建兩個抽象類,一個具有 Content 的類,另一個具有 Status 的類,以便多個專案可以繼承它并添加它們的列舉狀態和它們的內容并將其用于自己的目的。我正在使用 .NET 5.0。我有下一個代碼。
public enum EnumValues { Success,Fail}
public abstract class EnumStatus<TEnum> where TEnum : System.Enum
{
public TEnum Status { get; set; }
protected EnumStatus(TEnum status)
{
Status = status;
}
}
public abstract class Result<T> : EnumStatus<System.Enum>
{
public T Content { get; set; }
protected Result(System.Enum status) : base(status)
{
}
protected Result(T content, System.Enum status) : base(status)
{
Content = content;
}
}
我有我的自定義結果類
public class CustomResult<T> : Result<T>
{
public CustomResult(System.Enum status) : base(status)
{
}
public CustomResult(T content, System.Enum status) : base(content, status)
{
}
public static implicit operator CustomResult<T>(T content)
{
return new CustomResult<T>(content, EnumValues.Success);
}
public static implicit operator CustomResult<T>(EnumValues status)
{
return new CustomResult<T>(status);
}
}
所以當我在我的控制器中使用它時
public async Task<IActionResult> Test()
{
return new JsonResult(new CustomResult<bool>(true,EnumValues.Success));
}
我在郵遞員電話中得到的回應是
{
"content": true,
"status": {}
}
內容始終回傳,但我的狀態始終為空,除錯它內容和狀態在建構式中設定有效且正確,但是當它回傳給客戶端時,狀態始終為空,但如果我使用隱式運算子回傳結果,例如
回傳確定(EnumValues.Success)
它回傳有效結果。有人可以向我解釋為什么會這樣嗎?有什么解決辦法嗎?或者我犯了一些愚蠢的錯誤
uj5u.com熱心網友回復:
修復它的最簡單方法是使用 Newtonsoft.Json。將此代碼添加到啟動
using Newtonsoft.Json.Serialization;
services.AddControllers()
.AddNewtonsoftJson(options =>
options.SerializerSettings.ContractResolver =
new CamelCasePropertyNamesContractResolver());
如果您想繼續使用 Text.Json
services.AddControllers()
.AddJsonOptions(options =>
new JsonSerializerOptions
{
Converters = { new JsonStringEnumConverter() },
WriteIndented = true,
});
var options = new JsonSerializerOptions
{
Converters = { new JsonStringEnumConverter() },
WriteIndented = true,
};
var json = System.Text.Json.JsonSerializer.Serialize(result, options);
var obj = System.Text.Json.JsonSerializer.Deserialize<CustomResult<bool,EnumValues>>(json,options);
并修復類
public abstract class Result<T,TEnum> : EnumStatus<TEnum> where TEnum : Enum
{
public T Content { get; set; }
protected Result(TEnum status) : base(status)
{
}
protected Result(T content, TEnum status) : base(status)
{
Content = content;
}
}
public class CustomResult<T,TEnum> : Result<T,TEnum> where TEnum : Enum
{
public CustomResult(TEnum status) : base(status)
{
}
[System.Text.Json.Serialization.JsonConstructorAttribute]
public CustomResult(T content, TEnum status) : base(content, status)
{
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/437618.html
