响应内容不是补水对象

Response Content not Hydrating Object

我在 MVC 核心应用程序的控制器中调用 API,如下所示:

HttpContent httpContent = new StringContent(string.Empty, Encoding.UTF8, "text/plain");
HttpResponseMessage response = await client.PostAsync("api/users", httpContent);

if (response.IsSuccessStatusCode) {
    User userJson = await response.Content.ReadFromJsonAsync<User>();                
    string responseContent = await response.Content.ReadAsStringAsync();

responseContent 的值为:

"{
   \"actionName\":\"GetUser\",
   \"routeValues\":{\"id\":\"30131055-9ff0-472f-a147-69e76f7aac77\"},
   \"value\":{\"uid\":\"a36065bd-9d88-4ea3-f04d-08d98cfa8b83\",
   \"email\":\"example@example.org\",
   \"active\":true,\"created\":\"2021-10-12T19:49:16.0054897Z\",
   \"updated\":\"2021-10-12T19:49:16.0054899Z\"},\"formatters\":[],
   \"contentTypes\":[],
   \"statusCode\":201
}"

我没想到会出现这种类型的格式化内容,我期待的是 JSON,但我可以在“值”部分看到我的用户对象的值。

我的 uid、email、active、created 和 updated 的 User 对象属性都是 public 个具有 get/set 方法的属性。

所以我可以看到我的数据在那里,但是当我尝试反序列化对用户对象的响应时,我只看到实例化后的默认值。

我觉得我缺少一些简单的东西。

您的用户 class 似乎与响应 json 不匹配,您可以像这样创建与响应匹配的 class 结构

public class RouteValues
{
    public string id { get; set; }
}

public class Value //your user class
{
    public string uid { get; set; }
    public string email { get; set; }
    public bool active { get; set; }
    public DateTime created { get; set; }
    public DateTime updated { get; set; }
}

public class Response
{
    public string actionName { get; set; }
    public RouteValues routeValues { get; set; }
    public Value value { get; set; }
    public List<object> formatters { get; set; }
    public List<object> contentTypes { get; set; }
    public int statusCode { get; set; }
}

并反序列化到响应 class 并访问与您的用户对象等效的值对象,或者通过指定包含您的用户对象的键(即值键)来反序列化。

Christian Franco noticed that the items in the object being return matched CreatedAtActionResult 我调用的 API 返回的是我预期的值。这解释了我看到的奇怪行为。