2017-08-24 48 views
0

在尝试向azure-storage-table中插入数据对象时,TableEntity.Flatten正在抛出异常。Azure TableEntity Flatten方法不适用于“Byte”数据类型

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

数据对象包含不被支持byte属性。当我从上游接收到这个数据对象时,我将以新的class结尾,复制所有属性,同时将byte属性更改为int

还有其他更好的选择吗?

回答

0

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

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

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

     set 
     { 
      this.MyPropertyInt = value; 
     } 
    } 
} 
+0

我不使用TableEntity,我直接使用Flatten方法将我的数据对象转换为DynamicTableEntity – Saravanan

2

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

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

发出了拉动请求添加字节属性支持拼合/ ConvertBack方法: https://github.com/Azure/azure-storage-net/pull/537/files

在等待上述拉请求被合并到SDK。我已经提前更新了我写的支持字节类型和IEnumerable属性的原始nuget包,它在这里: https://www.nuget.org/packages/ObjectFlattenerRecomposer/

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

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

+0

Up投票提供链接。引发问题 – Saravanan

+0

除了链接中的这些类型外,还有一个额外的注意事项,也支持复杂的属性类型(您的自定义类等)。这些复杂的属性也可以有它们自己的复杂属性等,只要它们的对象树底部的末端节点属性是我在上面发送的链接中的这些类型之一,Flatten方法就会遍历并压扁整个复杂对象,将终端节点属性转换为EntityProperty,以便将其写入表存储。 –

相关问题