2017-08-24 23 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,以便將其寫入表存儲。 –

相關問題