Azure TableEntity Flatten方法不适用于“字节”数据类型

时间:2017-08-24 18:08:39

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

尝试将数据对象插入azure-storage-table时,TableEntity.Flatten会抛出异常。

System.Runtime.Serialization.SerializationException: Unsupported type : System.Byte encountered during conversion to EntityProperty.

数据对象包含不受支持的byte属性。当我从上游收到这个数据对象时,我最终得到了新的class,在将byte属性更改为int的同时复制了所有属性。

还有其他更好的选择吗?

2 个答案:

答案 0 :(得分:2)

字节数组是受支持的属性,但你是对的,那个字节不是。支持的类型在这里,检查执行转换的方法。 https://github.com/Azure/azure-storage-net/blob/master/Lib/Common/Table/EntityPropertyConverter.cs

解决方法可能是将byte属性转换为单个元素的byte数组。但我强烈建议你在github中打开一个bug来添加字节支持。添加它应该很容易。

发出拉取请求以向Flatten / ConvertBack方法添加字节属性支持: https://github.com/Azure/azure-storage-net/pull/537/files

等待上面的pull请求合并到SDK中。我已经开始更新我编写的原始nuget包以支持字节类型和IEnumerable属性,它在这里: https://www.nuget.org/packages/ObjectFlattenerRecomposer/

你也应该能够使用它。这些方法与Flattena dn ConvertBack相同,但它们支持Byte和所有其他IEnumerable类型。

更新:现在已在最新版本的SDK中修复此问题。您仍然需要使用Flatten和ConvertBack方法,但您可以使用最新版本编写和读取字节类型属性。

答案 1 :(得分:0)

您可以考虑将byte转换为同一类中的int属性,并使用[IgnoreProperty]属性标记byte属性。

public class MyEntity : TableEntity
{
    public int MyPropertyInt { get; set; }

    [IgnoreProperty]
    public byte MyProperty
    {
        get
        {
            return (byte)this.MyPropertyInt;
        }

        set
        {
            this.MyPropertyInt = value;
        }
    }
}