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

DynamoDB NULL值转换失败:如何允许字符串属性存NULL?

解决DynamoDB.NET SDK中NULL属性转换失败问题

问题重现

你的DynamoDB数据模型定义如下:

public class ChallengePart_dynamoDB
{
    [DynamoDBProperty("numPlayers")]
    public string NumPlayers { get; set; }

    [DynamoDBProperty("header")]
    public string Header { get; set; }  
}

使用以下代码扫描数据:

try
{
    var model = await dynamoDBContext.ScanAsync<ChallengePart_dynamoDB>(
        null
    ).GetRemainingAsync();
}
catch (Exception e)
{
}

当表中numPlayers或header属性为DynamoDB NULL时,抛出转换错误:

"Unable to convert [Amazon.DynamoDBv2.DocumentModel.DynamoDBNull] of type Amazon.DynamoDBv2.DocumentModel.DynamoDBNull to System.String"

将属性改为可空字符串string?后问题仍未解决。

解决方案

方法1:为单个属性添加自定义转换器

创建一个处理DynamoDBNull与.NET null转换的转换器类:

using Amazon.DynamoDBv2.DataModel;
using Amazon.DynamoDBv2.DocumentModel;

public class NullableStringConverter : IPropertyConverter
{
    public object FromEntry(DynamoDBEntry entry)
    {
        return entry is DynamoDBNull ? null : entry.AsString();
    }

    public DynamoDBEntry ToEntry(object value)
    {
        return value == null ? DynamoDBNull.Value : new Primitive((string)value);
    }
}

然后在模型的目标属性上指定该转换器:

public class ChallengePart_dynamoDB
{
    [DynamoDBProperty("numPlayers", typeof(NullableStringConverter))]
    public string? NumPlayers { get; set; }

    [DynamoDBProperty("header", typeof(NullableStringConverter))]
    public string? Header { get; set; }  
}

方法2:全局配置所有字符串属性的转换规则

如果希望项目中所有字符串属性都自动处理DynamoDBNull,可以在初始化DynamoDBContext时添加全局转换器:

var contextConfig = new DynamoDBContextConfig
{
    Conversion = new ConversionConfig
    {
        CustomConverters = new List<IPropertyConverter>
        {
            new NullableStringConverter()
        }
    }
};

var dynamoDBContext = new DynamoDBContext(yourDynamoDBClient, contextConfig);

关键说明

  • .NET的可空字符串string?语法本身没问题,但AWS SDK默认不会将DynamoDBNull映射为.NET null,必须通过转换器显式处理这种类型转换。
  • 如果属性在DynamoDB中不存在,SDK会自动将.NET属性设为null,无需额外处理;只有当属性存在但值为DynamoDBNull时才需要转换器。

内容的提问来源于stack exchange,提问作者Kasper Sommer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 02:12:26