【发布时间】:2020-11-19 05:02:20
【问题描述】:
我正在创建一个集成测试来验证一个 REST API。 一切都按预期发生。但是当我试图反序列化响应的内容时,一个 IEnumerable 类型的属性没有填充字符串 json 中存在的值。
见下面部分测试代码:
var inputValue = new List<InputValueType> {
new InputValueType()
};
var request = new HttpRequestMessage(new HttpMethod("POST"), "/api/endpoint")
{
Content = new StringContent(
Newtonsoft.Json.JsonConvert.SerializeObject(inputValue),
Encoding.UTF8,
MediaTypeNames.Application.Json
)
};
var response = await _client.SendAsync(request);
var contentString = await response.Content.ReadAsStringAsync();
var content = Newtonsoft.Json.JsonConvert.DeserializeObject<ResponseValueType>(contentString);
内容字符串是
{
"status": "ERRO",
"codigo": "400",
"descricao": "Quantidade de Registros não processados: 1",
"folhas": [
{
"tpInscEmpregador": null,
"nrInscEmpregador": null,
"tpInscEstabelecimento": null,
"nrInscEstabelecimento": null,
"matricula": null,
"cpf": null,
"idFolha": null,
"tpFolha": null,
"erro": "CPF,TpInscEmpregador,NrInscEmpregador,Matricula,IdFolha,IdFolhaPai,TpFolha,CargoCodigo,CargoNome,LotacaoCodigo,LotacaoNome,TpInscEstabelecimento,NrInscEstabelecimento,AnoMes,DataPagamento,DataInicial,DataFinal,Periodicidade,ValorProventos,ValorDescontos,ValorLiquido,SalarioContratual,BaseCalculoINSS,BaseCalculoFGTS,BaseCalculoIRRF,SaldoFGTS,ValorMargem,FGTS,FGTSContSocial,Rubricas"
}
]
}
ResponseValueType 是
public class ResponseValueType
{
public string Status { get; set; }
public string Codigo { get; set; }
public string Descricao { get; set; }
public virtual IEnumerable<ResponseValueTypeErro> Folhas { get; }
public ResponseValueType()
{
Status = "OK";
Codigo = "200";
Descricao = "Sucesso";
}
public ResponseValueType(string status, string codigo, string descricao)
{
Status = status;
Codigo = codigo;
Descricao = descricao;
}
public ResponseValueType(string status, string codigo, string descricao, IEnumerable<ResponseValueTypeErro> errors)
: this(status, codigo, descricao)
{
Folhas = errors.ToList();
}
}
public class ResponseValueTypeErro
{
public string TpInscEmpregador { get; set; }
public string NrInscEmpregador { get; set; }
public string TpInscEstabelecimento { get; set; }
public string NrInscEstabelecimento { get; set; }
public string Matricula { get; set; }
public string CPF { get; set; }
public string IdFolha { get; set; }
public string TpFolha { get; set; }
public string Erro { get; set; }
}
但是,当 contentString 被反序列化时,与属性 Folhas 保持一致的内容等于 null。
我该怎么做才能正确反序列化 Folhas 属性?
【问题讨论】:
-
错字?错误的类名?
-
IEnumerable<ResponseValueType> Folhas { get; }->IEnumerable<ResponseValueTypeErro> Folhas { get; }? -
@GuruStron...对不起!我已经更正了帖子......类型相同。
-
@GuruStron .... 你让我看到了我的错误。我只需要将设置选项设置为属性 Folhas
-
@GeanRibeiro 我没有提供答案,所以我很好)