You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用C#将DynamoDB结果JSON转换为普通JSON格式

解决方案

可用NuGet包

  • 首选AWS官方提供的Amazon.DynamoDBv2包,内置原生的DynamoDB类型转普通JSON的能力,无需额外依赖,兼容性最优
  • 若需要结合实体类映射使用,可额外安装Amazon.DynamoDBv2.DataModel扩展包

实现方案

方案1:官方SDK原生转换(推荐)

无需自己写类型判断逻辑,完全适配DynamoDB的类型映射规则。

  1. 先安装NuGet包:
Install-Package Amazon.DynamoDBv2
  1. 代码示例:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 09:45:04