У нас есть существующее безсерверное приложение, и мы хотим перенести лямбда-выражения из nodejs в ядро dotnet.
Похоже, SDK для nodejs сохраняет null
значения как Null
записей динамодаба.Следующие данные json:
{
"key": "xxx",
"field": null
}
сохраняется как:
{
"key": {
"S": "xxxx"
},
"field": {
"NULL": true
}
}
Поэтому я создал класс dotnet, чтобы можно было использовать Object Persistence Model :
[DynamoDBTable("tableName")]
public class MyData
{
[DynamoDBHashKey("key")]
public string Key { get; set; }
[DynamoDBProperty("field")]
public string Field { get; set; }
}
Десериализация данных из DynamodB выполняется с помощью следующей команды:
public async Task<MyData> GetDataByKey(string key)
{
IAmazonDynamoDB dynamoDbClient = new AmazonDynamoDBClient();
var config = new DynamoDBContextConfig { Conversion = DynamoDBEntryConversion.V2 };
var dbContext = new DynamoDBContext(dynamoDbClient, config);
return await dbContext.LoadAsync<MyData>(key);
}
Но если в поле field
есть значение Null
, операция завершается неудачно сследующее исключение:
System.InvalidOperationException: не удалось преобразовать [Amazon.DynamoDBv2.DocumentModel.DynamoDBNull] типа Amazon.DynamoDBv2.DocumentModel.DynamoDBNull в System.String
Как я могу обработать это в dotnet без запуска сценария предварительной миграции в базе данных, чтобы исправить все данные (например, удалить все нулевые значения, которые будут сопоставлены с несовместимым типом)?