我正在尝试将 HTTP 响应消息反序列化为
HealthReport
对象。但是, Newtonsoft
或 System.Text.Json
都不支持反序列化为类型,因为不能是无参数构造。
由于
HealthReport
是 ASP.NET Core 在健康检查方面广泛使用的类型,因此我认为无需复杂的自定义 JsonConvert
函数即可进行反序列化。但我似乎无法让它发挥作用。
我调用一个端点,它返回一个 HttpResponseMessage,我知道它只包含一个 HealthReport。 我对该响应调用 ReadAsStringAsync() 。我尝试使用 NewtonSoft 和 System.Text.Json 进行反序列化,但两者都抛出不支持转换的异常,因为 HealtReport 不支持无参数构造。
是否有人有经验或建议来轻松反序列化内容,我必须手动编写自定义 JsonConverter 才能达到我想要的结果?
我收到了一些很好的建议。 我最终利用自定义转换器并使用动态类型作为反序列化的目标类型,然后在 foreach 循环中迭代每个属性并将它们映射到合适的类型,并根据映射的属性实例化一个新的 HealthReport 对象。
我也有同样的问题。 HealthReport 类是密封的,没有空参数构造函数,并且其属性只有 get 方法。没有什么利于反序列化。
在对将 http 响应作为不可反序列化的“application/json”发送进行抱怨之后:我构建了一个实用程序类来促进反序列化,然后使用 ToHealthReport 方法来获取 HealthReport 对象。
public class SerializableHealthReport {
public Dictionary<string HealthReportEntry> Entries { get; set; }
public HealthStatus Status { get; set; }
public TimeSpan TotalDuration { get; set; }
public SerializableHealthReport()
{
}
public HealthReport ToHealthReport()
{
return new HealthReport(Entries, Status, TotalDuration);
}
}
反序列化示例:
public HealthReport DeserializeHealthResponse(string httpResponseContent)
{
var serializableHealthReport =
JsonSerializer.Deserialize<SerializableHealthReport>(content);
return serializableHealthReport.ToHealthCheck();
}
我希望这有帮助!