首页 > 解决方案 > 如何将 Azure Cosmos DB 查询记录集映射到 C# 类对象

问题描述

我在 Azure Cosmos 数据库中有一个客户容器。按照标准数据建模建议将与客户相关的数据放入同一个容器中,并将分区键设置为“/CustomerId”,我在容器中同时拥有客户的信息和客户的销售订单对象。查询 SELECT * FROM c where c.CustomerId = 'CustomerABC' 返回以下 JSON 对象:

[
{
    "CustomerId": "CustomerABC",
    "type": "Customer",
    "name": "ABC",
    "location": "New York",
    "id": "fce01d24-2e5f-4738-af93-9ce251339015",
    "_rid": "XOQwAPL2q4QBAAAAAAAAAA==",
    "_self": "dbs/XOQwAA==/colls/XOQwAPL2q4Q=/docs/XOQwAPL2q4QBAAAAAAAAAA==/",
    "_etag": "\"0500751f-0000-1e00-0000-60607a6e0000\"",
    "_attachments": "attachments/",
    "_ts": 1616935534
},
{
    "OrderId": "Order1",
    "CustomerId": "CustomerABC",
    "Type": "Order",
    "Item": "Laptop",
    "Total": 500,
    "id": "3e8d7633-d2bf-4c0c-b494-632abc2cf44b",
    "_rid": "XOQwAPL2q4QDAAAAAAAAAA==",
    "_self": "dbs/XOQwAA==/colls/XOQwAPL2q4Q=/docs/XOQwAPL2q4QDAAAAAAAAAA==/",
    "_etag": "\"05009120-0000-1e00-0000-606085860000\"",
    "_attachments": "attachments/",
    "_ts": 1616938374
},
{
    "OrderId": "Order2",
    "CustomerId": "CustomerABC",
    "Type": "Order",
    "Item": "Battery",
    "Total": 125,
    "id": "7d759ff2-20f7-4c7a-9885-00d1a2f6faeb",
    "_rid": "XOQwAPL2q4QEAAAAAAAAAA==",
    "_self": "dbs/XOQwAA==/colls/XOQwAPL2q4Q=/docs/XOQwAPL2q4QEAAAAAAAAAA==/",
    "_etag": "\"05009220-0000-1e00-0000-6060858e0000\"",
    "_attachments": "attachments/",
    "_ts": 1616938382
}

]

返回的 JSON 包含一个数组或多个项目。我会假设第一项始终是客户信息,但我不是 100% 确定。紧随其后的是同一客户的销售订单。我的问题是——因为它们不是相同的对象类型,你如何将此 JSON 映射到 C# 类对象,其中 C# 类可能是这样的:

public class CustomerOverview
{
    public CustomerInfo Info { get; set; }

    public List<CustomerOrder> Orders { get; set; }
}

我是否只需要遍历 JSON 中的每个项目并检查它的“类型”属性,然后手动将项目映射到我相应的 c# 对象?或者有没有更简单的方法来做到这一点?谢谢!

标签: c#azureazure-cosmosdb

解决方案


推荐阅读