反序列化时的映射问题
Mapping issue when Deserialising
我有以下代码:
using System.Text.Json;
private async Task<AuditReviewerDelegationDto> GetDelegationAsync()
{
// TODO: Get current logged in user, pass mdmuseridentifier
var mdmUserIdentifier = 248113;
var response = LocalHttpClient.GetAsync(BaseAddress + "api/AuditReviewerDelegation/GetDelegation/" + mdmUserIdentifier).Result;
response.EnsureSuccessStatusCode();
var responseContent = await response.Content.ReadAsStringAsync();
var tt = JsonSerializer.Deserialize<AuditReviewerDelegationDto>(responseContent);
return tt;
}
我的变量 responseContent 包含我期望的所有数据。但是,当我使用 Deserialize 方法时,我的 tt 变量为空。我相信这样做的原因是 responseContent 上的所有属性都以小写字母开头,但在我的 AuditReviewerDelegationDto 上它们都以大写字母开头。我不能将模型更改为小写。无论如何我可以让反序列化器忽略大小写或将响应对象设置为重新调整驼峰大小写。
是的,为了忽略 属性 名称的大小写,您只需将 JsonSerializerOptions.PropertyNameCaseInsensitive
设置为 true
。有关更多详细信息,请参阅 this page,但代码可能如下所示:
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
var tt = JsonSerializer.Deserialize<AuditReviewerDelegationDto>(responseContent, options);
但是,如果 tt
本身是 null
(而不是 tt
的个别属性是 null
),您可能会遇到另一个问题 - 这取决于实际responseContent
.
内的文本
我有以下代码:
using System.Text.Json;
private async Task<AuditReviewerDelegationDto> GetDelegationAsync()
{
// TODO: Get current logged in user, pass mdmuseridentifier
var mdmUserIdentifier = 248113;
var response = LocalHttpClient.GetAsync(BaseAddress + "api/AuditReviewerDelegation/GetDelegation/" + mdmUserIdentifier).Result;
response.EnsureSuccessStatusCode();
var responseContent = await response.Content.ReadAsStringAsync();
var tt = JsonSerializer.Deserialize<AuditReviewerDelegationDto>(responseContent);
return tt;
}
我的变量 responseContent 包含我期望的所有数据。但是,当我使用 Deserialize 方法时,我的 tt 变量为空。我相信这样做的原因是 responseContent 上的所有属性都以小写字母开头,但在我的 AuditReviewerDelegationDto 上它们都以大写字母开头。我不能将模型更改为小写。无论如何我可以让反序列化器忽略大小写或将响应对象设置为重新调整驼峰大小写。
是的,为了忽略 属性 名称的大小写,您只需将 JsonSerializerOptions.PropertyNameCaseInsensitive
设置为 true
。有关更多详细信息,请参阅 this page,但代码可能如下所示:
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
var tt = JsonSerializer.Deserialize<AuditReviewerDelegationDto>(responseContent, options);
但是,如果 tt
本身是 null
(而不是 tt
的个别属性是 null
),您可能会遇到另一个问题 - 这取决于实际responseContent
.