在Azure存储表中存储C#对象时,将忽略具有私有setter的属性。是否可以在不将setter公开的情况下将这些属性写入表中?
Json.net通过JsonProperty属性提供此功能。存储表是否有可用的此类属性?我能找到的唯一属性是IgnorePropertyAttribute,它用于忽略属性。
class TestEntity : TableEntity
{
public TestEntity(string property1, string property2)
{
this.Property1 = property1;
this.Property2 = property2;
}
public string Property1 { get; set; }
public string Property2 { get; private set; }
}
TestEntity testEntity = new TestEntity("Value1", "Value2");
testEntity.PartitionKey = "PartitionKey";
testEntity.RowKey = "RowKey";
TableOperation insertOperation = TableOperation.Insert(testEntity);
table.Execute(insertOperation);
在上面的示例中,只有Property1(Value1)存储在表中。不存储Property2的值。存储它的唯一方法是将setter更改为public。
答案 0 :(得分:1)
您不需要覆盖ITableEntity
接口,因为8.0版Table Storage SDK支持将自定义.Net对象写入和读取到表存储(包括具有私有设置器的属性)。 SDK支持多种方式。
您的自定义对象甚至不需要实现ITableEntity接口,也不需要继承TableEntity类。它们还可以包含复杂的嵌套属性。除IEnumerable
类型索引属性(列表,数组等)外,所有这些都受支持。
所以这是如何:
您可以使用辅助方法TableEntity.Flatten
静态方法将自定义.Net实体转换为平面的EntityProperties字典。使用该Dictionary创建DynamicTableEntity并写入表存储。您可以使用相同的PK,RK读取该实体,并使用TableEntity.ConvertBack<YourEntityType>
方法重新构建原始实体。
第二种替代方法是,您可以在SDK中使用TableEntityAdapter
类。
您可以在此处查看我在类似问题中给出的示例用法答案:
Sample writing a generic object to Azure Storage?