2013-11-04 170 views
1

我想存储枚举对象的列表存储在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; 
     } 
    } 
} 

当我做一个插入并尝试从存储中取回数据时,列表始终为空。天青没有反序列化枚举列表?

回答

1

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

+0

你可以在python API中做同样的事吗?我将我的列表转换为JSON字符串,但不确定这是最好的方法。 –

1

这里有一个简单的解决方法(类似于我所做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,如果您想支持这个想法并加以改进,可以方便使用。