如何使用C#将DynamoDB结果JSON转换为普通JSON格式
解决方案
可用NuGet包
- 首选AWS官方提供的
Amazon.DynamoDBv2包,内置原生的DynamoDB类型转普通JSON的能力,无需额外依赖,兼容性最优 - 若需要结合实体类映射使用,可额外安装
Amazon.DynamoDBv2.DataModel扩展包
实现方案
方案1:官方SDK原生转换(推荐)
无需自己写类型判断逻辑,完全适配DynamoDB的类型映射规则。
- 先安装NuGet包:
Install-Package Amazon.DynamoDBv2
- 代码示例:
using Amazon.DynamoDBv2.DocumentModel; using Amazon.DynamoDBv2.Model; using System.Collections.Generic; using System.Text.Json; // 假设dynamoResponse为调用Query/Scan等接口返回的响应 List<Dictionary<string, AttributeValue>> dynamoItems = dynamoResponse.Items; foreach (var item in dynamoItems) { // AttributeValue字典转DynamoDB Document对象 Document doc = Document.FromAttributeMap(item); // 直接生成无类型标识的普通JSON string normalJson = doc.ToJson(); // 如需转自定义实体类,直接反序列化即可 YourCustomEntity entity = JsonSerializer.Deserialize<YourCustomEntity>(normalJson); }
方案2:自定义转换逻辑(无SDK依赖场景)
如果不想引入AWS SDK,可自行实现基础类型的转换逻辑,示例基于System.Text.Json实现:
using System.Text.Json; using System.Collections.Generic; using System.Linq; public static class DynamoDbJsonConverter { public static JsonElement ConvertAttributeValue(JsonElement dynamoAttr) { foreach (var prop in dynamoAttr.EnumerateObject()) { return prop.Name switch { "S" => JsonSerializer.SerializeToElement(prop.Value.GetString()), "N" => JsonSerializer.SerializeToElement(decimal.Parse(prop.Value.GetString()!)), "BOOL" => JsonSerializer.SerializeToElement(prop.Value.GetBoolean()), "NULL" => JsonSerializer.SerializeToElement<object>(null), "L" => JsonSerializer.SerializeToElement(prop.Value.EnumerateArray().Select(ConvertAttributeValue)), "M" => JsonSerializer.SerializeToElement(prop.Value.EnumerateObject().ToDictionary(p => p.Name, p => ConvertAttributeValue(p.Value))), _ => throw new NotSupportedException($"未支持的DynamoDB类型:{prop.Name}") }; } return default; } public static string ConvertToNormalJson(string dynamoRawJson) { var dynamoElement = JsonSerializer.Deserialize<JsonElement>(dynamoRawJson); var result = ConvertAttributeValue(dynamoElement); return JsonSerializer.Serialize(result, new JsonSerializerOptions { WriteIndented = true }); } }
注意事项
- 官方转换工具已默认支持字符串、数字、布尔、空值、列表、嵌套对象等常见类型,二进制、集合等特殊类型可根据业务需求自行扩展
- 如需调整JSON的大小写、缩进等格式,可在序列化时传入对应的序列化配置参数
内容的提问来源于stack exchange,提问作者Vel
相关产品推荐
相关产品推荐

