尝试将数据对象插入azure-storage-table
时,TableEntity.Flatten
会抛出异常。
System.Runtime.Serialization.SerializationException: Unsupported type : System.Byte encountered during conversion to EntityProperty.
数据对象包含不受支持的byte
属性。当我从上游收到这个数据对象时,我最终得到了新的class
,在将byte
属性更改为int
的同时复制了所有属性。
还有其他更好的选择吗?
答案 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;
}
}
}