How to ignore/unwrap object name when deserializing from JSON?

d00*_*00d 1 c# blazor system.text.json

我正在尝试反序列化从网络服务收到的 JSON。JSON 看起来像这样:

{ "data": 
   [  
      {"name": "john", "company": "microsoft"}, 
      {"name": "karl", "company":"google"}
   ]
}
Run Code Online (Sandbox Code Playgroud)

我想要反序列化为的模型:

public class employee {
   public string name {get; set;}
   public string company {get; set;}

}
Run Code Online (Sandbox Code Playgroud)

问题是,由于该对象名称“data”,我无法使用 System.Text.Json 反序列化。我怎样才能使解串器解开/忽略数据标签并从该标签内的任何内容开始?

Gur*_*ron 5

只需创建一个包装对象并将其用于反序列化:

public class Root {
   public List<employee> data {get; set;}
}

var employees = JsonSerializer.Deserialize<Root>(jsonString).data;
Run Code Online (Sandbox Code Playgroud)

如果有很多不同的类型包含此模式,您可以将其设为Root 通用:

public class Root<T> {
   public List<T> data {get; set;}
}

var employees = JsonSerializer.Deserialize<Root<employee>>(jsonString).data;
Run Code Online (Sandbox Code Playgroud)

Note that data contains a collection of employees not a single record.

另请注意,您可以使用推荐的Pascal 大小写作为属性名称,反序列化器应该能够拾取它(但它不能 - 您可以通过提供JsonSerializerOptions正确的PropertyNamingPolicy设置来帮助它)。