我有一个Blazor WebAssembly应用程序(ASP.Net Core托管,渐进式Web应用程序),具有以下逻辑:
客户端:
服务器:(我有以下代码,可以按预期工作的服务器端API:)
服务器端控制器API成功填充了模型,当我进行检查时,我看到以下快照(*某些值已经被屏蔽以确保安全) 模型:(我的MorUserCallLogsResponse模型如下所示:)
回到 Blazor,当我尝试在下一行读取返回的对象时:
客户端:
protected override async Task OnInitializedAsync() {
string token = await _loginService.GetToken();
_http.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
var result = await _http.PostAsJsonAsync("api/api/getcalllogs", userCallsRequestFilters);
if (result.IsSuccessStatusCode) {
var morUserCallLogs = await result.Content.ReadFromJsonAsync < MorUserCallLogsResponse > ();
await js.InvokeAsync < object > ("TestDataTablesAdd", "#example");
} else {
morUserCallLogs = new MorUserCallLogsResponse();
}
}
服务器:(我有以下代码,可以按预期工作的服务器端API:)
[Authorize]
[ApiController]
[Route("api/[controller]")]
public class MorApiController : ControllerBase
...
[HttpPost("getcalllogs")]
public async Task<MorUserCallLogsResponse> GetCallLogs ([FromBody] MorUserCallsRequestFilters filters)
{
...
return result;
服务器端控制器API成功填充了模型,当我进行检查时,我看到以下快照(*某些值已经被屏蔽以确保安全) 模型:(我的MorUserCallLogsResponse模型如下所示:)
namespace MyNumberV2.Model
{
public class MorUserCallLogsResponse
{
public MorUserCallLogsResponse()
{
Calls = new List<MorCall>();
}
public string Error { get; set; }
public bool IsSuccessfull { get; set; }
public string userid;
public string username;
...
...
public List<MorCall> Calls { get; set; }
public class MorCall
{
public string calldate2;
public string timezone;
...
...
}
}
}
回到 Blazor,当我尝试在下一行读取返回的对象时:
var morUserCallLogs = await result.Content.ReadFromJsonAsync<MorUserCallLogsResponse>();
正如您所见,我的检索到的模型包含了所有属性和140个嵌套调用对象模型,但是所有属性都是NULL...
var options = new JsonSerializerOptions() { Converters = { new JsonStringEnumConverter() }, PropertyNameCaseInsensitive = true };
我还根据我的需要添加了枚举转换器。 - bzmindJsonSerializerDefaults.Web
作为起点可能更好:var options = new JsonSerializerOptions(JsonSerializerDefaults.Web); options.Converters.Add(new JsonStringEnumConverter());
- Michael Csikos