.NET 8 API中如何查询Cosmos DB的嵌套属性?
问题原因
你遇到的CarModel为null的问题,根源是查询返回的JSON结构和Driver类的属性不匹配:
当执行SELECT c.DriverNumber, c.Name, c.CarModel.Make, c.CarModel.SomeNumber时,Cosmos DB返回的是扁平结构结果,不存在CarModel嵌套对象:
{ "DriverNumber": 12, "Name": "William", "Make": "Mercedess", "SomeNumber": 145 }
而你的Driver类定义里包含CarModel属性,反序列化时因为找不到对应的CarModel键,该属性会被初始化为null。
解决方案
有两种可行方式实现“只查询特定嵌套属性,无需拉取整个对象”:
1. 调整SQL查询,包装嵌套属性结构
修改SELECT语句,把需要的嵌套属性包装成CarModel对象,让返回的JSON结构和Driver类匹配:
public async Task<object> GetDriverByIdAsync6(string id) { // 用参数化查询避免SQL注入风险,禁止直接拼接id var queryDefinition = new QueryDefinition(@" SELECT c.DriverNumber, c.Name, { Make: c.CarModel.Make, SomeNumber: c.CarModel.SomeNumber } AS CarModel FROM c WHERE c.id = @id") .WithParameter("@id", id); var queryResult = await _container.GetItemQueryIterator<Driver>(queryDefinition).ReadNextAsync(); var driver = queryResult.FirstOrDefault(); return new { DriverNumber = driver.DriverNumber, Name = driver.Name, Make = driver.CarModel.Make, SomeNumber = driver.CarModel.SomeNumber }; }
此时Cosmos返回的JSON会包含CarModel嵌套对象,能正确映射到Driver类的属性:
{ "DriverNumber":12, "Name":"William", "CarModel":{ "Make":"Mercedess", "SomeNumber":145 } }
2. 使用DTO类接收查询结果
创建仅包含所需字段的DTO(数据传输对象),直接接收扁平的查询结果,避免依赖Driver类的结构:
// 定义匹配查询结果的DTO类 public class DriverCarInfoDto { public int DriverNumber { get; set; } public string Name { get; set; } public string Make { get; set; } public int SomeNumber { get; set; } } // 查询方法 public async Task<object> GetDriverByIdAsync6(string id) { var queryDefinition = new QueryDefinition(@" SELECT c.DriverNumber, c.Name, c.CarModel.Make, c.CarModel.SomeNumber FROM c WHERE c.id = @id") .WithParameter("@id", id); var queryResult = await _container.GetItemQueryIterator<DriverCarInfoDto>(queryDefinition).ReadNextAsync(); var driverInfo = queryResult.FirstOrDefault(); return new { driverInfo.DriverNumber, driverInfo.Name, driverInfo.Make, driverInfo.SomeNumber }; }
这种方式更轻量,无需修改查询返回结构,直接用DTO匹配扁平字段即可。
重要提醒
永远不要直接把用户输入(比如id)拼接到SQL语句中,这会引发SQL注入风险,必须使用WithParameter方法做参数化查询。
内容的提问来源于stack exchange,提问作者R.wilson
相关产品推荐
相关产品推荐

