C# 等效于 Java 的 @DynamoDBTyped(DynamoDBAttributeType.BOOL)
C# Equivalant of Javas @DynamoDBTyped(DynamoDBAttributeType.BOOL)
我有这个问题,但没有 C# 答案,只有 Java 个 () 所以发布这个。
据我所知,您无法使用 DynamoDB 的对象持久性模型并确保布尔基元在放入 DynamoDB 时保持“真”/“假”table。默认情况下,它们会变成“1”和“0”。
我们如何确保布尔字段在放入 DynamoDB 时不会变成 1/0?
我们可以做到这一点的一种方法是使用 IPropertyConverter。
首先,我们需要创建一个 class 来扩展 IPropertyConverter,并放入我们想要的逻辑。我们需要描述往返逻辑。
public class DynamoDBNativeBooleanConverter : IPropertyConverter
{
public DynamoDBEntry ToEntry(object value) => (bool) value ? "true" : "false";
public object FromEntry(DynamoDBEntry entry)
{
var val = bool.Parse(entry.AsPrimitive().Value.ToString());
return val;
}
}
然后,我们可以在使用我们的布尔属性时使用这个class:
...
[JsonProperty("can_flip")]
[DynamoDBProperty("can_flip", typeof(DynamoDBNativeBooleanConverter))]
public bool CanFlip { get; set; }
...
使用它,DynamoDB 表中的数据将显示为“true”或“false”,当您使用它时,它将是一个布尔值。
@Dhruv 的原始转换器保存为字符串值而不是原生布尔值。您可以稍微修改 属性 转换器以使用 DynamoDBBool 类型并仍然使用文档模型,如下所示:
public class DynamoDBNativeBooleanConverter : IPropertyConverter
{
public DynamoDBEntry ToEntry(object value) => new DynamoDBBool(bool.TryParse(value?.ToString(), out var val) && val);
public object FromEntry(DynamoDBEntry entry) => entry.AsDynamoDBBool()?.Value;
}
如果需要,这可以进一步扩展以支持从 FromEntry 中的 string/number/etc 读取以处理遗留数据方案。
我有这个问题,但没有 C# 答案,只有 Java 个 (
据我所知,您无法使用 DynamoDB 的对象持久性模型并确保布尔基元在放入 DynamoDB 时保持“真”/“假”table。默认情况下,它们会变成“1”和“0”。
我们如何确保布尔字段在放入 DynamoDB 时不会变成 1/0?
我们可以做到这一点的一种方法是使用 IPropertyConverter。
首先,我们需要创建一个 class 来扩展 IPropertyConverter,并放入我们想要的逻辑。我们需要描述往返逻辑。
public class DynamoDBNativeBooleanConverter : IPropertyConverter
{
public DynamoDBEntry ToEntry(object value) => (bool) value ? "true" : "false";
public object FromEntry(DynamoDBEntry entry)
{
var val = bool.Parse(entry.AsPrimitive().Value.ToString());
return val;
}
}
然后,我们可以在使用我们的布尔属性时使用这个class:
...
[JsonProperty("can_flip")]
[DynamoDBProperty("can_flip", typeof(DynamoDBNativeBooleanConverter))]
public bool CanFlip { get; set; }
...
使用它,DynamoDB 表中的数据将显示为“true”或“false”,当您使用它时,它将是一个布尔值。
@Dhruv 的原始转换器保存为字符串值而不是原生布尔值。您可以稍微修改 属性 转换器以使用 DynamoDBBool 类型并仍然使用文档模型,如下所示:
public class DynamoDBNativeBooleanConverter : IPropertyConverter
{
public DynamoDBEntry ToEntry(object value) => new DynamoDBBool(bool.TryParse(value?.ToString(), out var val) && val);
public object FromEntry(DynamoDBEntry entry) => entry.AsDynamoDBBool()?.Value;
}
如果需要,这可以进一步扩展以支持从 FromEntry 中的 string/number/etc 读取以处理遗留数据方案。