在enure表存储中存储枚举列表

时间:2013-11-04 12:24:04

标签: c# enums azure-storage azure-table-storage

我正在尝试在Azure表存储中存储枚举对象列表,但是当azure插入它时,列表的值为空。

public enum ExtractedType
{
    Image,
    Video
}
public class Request : TableEntity
{
   private List<ExtractedType> _ExtractedTypes = new List<ExtractedType>();
    public List<ExtractedType> ExtractedTypes
    {
        get
        {
            return _ExtractedTypes;
        }

        set
        {
            _ExtractedTypes = value;
        }
    }
} 

当我执行插入并尝试从存储中获取数据时,列表始终为null。 azure可以不反序列化枚举列表吗?

2 个答案:

答案 0 :(得分:2)

这是一个简单的解决方法(类似于我所做的here):

public string ExtractedTypesFlat { get; set; } //for use by the Azure client libs only
[IgnoreProperty] public List<ExtractedType> ExtractedTypes 
{
    get 
    { 
        return ExtractedTypesFlat
                     .Split(',')
                     .Select(s => (ExtractedType)Enum.Parse(typeof(ExtractedType), s))
                     .ToList(); 
    }
    set { ExtractedTypesFlat =  String.Join(",", value); }
}

正如我在另一个帖子中所提到的,如果可以使用简单的支持值而不是额外的公共属性(没有覆盖ReadEntity / WriteEntity的麻烦),那将会很好。同样,我会链接到我打开的user voice ticket,如果您愿意支持这个想法并对其进行投票,那么就会有所帮助。

答案 1 :(得分:1)

使用Windows Azure存储客户端库存储实体时,无法序列化List对象。但是,您可以通过覆盖TableEntity.ReadEntityTableEntity.WriteEntity方法来自定义实体的序列化行为。这也允许您调用基本实现来使用内置的序列化器/反序列化器并添加对List类型的支持。