如何使用.NET从DynamoDB项中提取Map类型属性



我已经成功查询了DynamoDB数据集,并返回了与主键关联的最后一项。项目数据包括以下内容:

`{
"machineID": {
"N": "1322"
},
"ts": {
"N": "1646299793339"
},
"data": {
"M": {
"average-speed": {
"N": "0"
},
"in-machine-mode": {
"N": "0"
},
"run-speed": {
"N": "40"
},
"total-packs-life": {
"N": "0"
},
"recipe-loaded-id": {
"N": "1"
},
"total-packs-shift": {
"N": "0"
},
"message-banner": {
"N": "0"
},
"ts": {
"N": "1646299793339"
}
}
}
}`

我想提取JSON格式的Map值,但找不到任何关于如何实现这一点的说明/教程。

以下是查询和提取与机器编号相关的最后一条记录的基本代码。

`var response = await client.QueryAsync(request);

var result = response.Items;

foreach(Dictionary<string, AttributeValue> item in result)
{
foreach(KeyValuePair<string, AttributeValue> kvp in item )
{
var attribute = kvp.Key;
var value = kvp.Value;

Console.WriteLine(attribute + " " + (value.N == null ? "" : value.N));              
}
}`

输出如下:ts 1646299793339机器ID 1322数据

如何获取M属性?如果能帮助我达成谅解,我将不胜感激。

试验见上文

我花了一些时间寻找答案,并在这个过程中了解了更多关于dyanamoDB如何工作的信息,现在我有了一个有效的解决方案。

重要的是,我需要将查询中的属性键值对转换为文档。

使用实现

var response = await dynamoDBClient.QueryAsync(request);
var attributes = response.Items.FirstOrDefault();
var doc = Document.FromAttributeMap(attributes);

这是一个将doc转换为JSON对象的简单例子

Console.WriteLine(doc.ToJson());

也许还有别的办法?欢迎评论。

最新更新