2017-12-08 10 views
0

AzureストレージテーブルにC#オブジェクトを格納するとき、プライベートセッターでのプロパティは無視されます。設定者を公開せずにこれらのプロパティをテーブルに書き込むことは可能ですか?プライベートセッターでAzureテーブルにPOCOを保存

Json.netはJsonProperty属性によってこの機能を提供します。ストレージテーブルに使用できる属性はありますか?私が見つけることができる唯一のプロパティは、プロパティを無視するために使用されるIgnorePropertyAttributeです。

class TestEntity : TableEntity 
{ 
    public TestEntity(string property1, string property2) 
    { 
     this.Property1 = property1; 
     this.Property2 = property2; 
    } 
    public string Property1 { get; set; } 
    public string Property2 { get; private set; } 
} 

TestEntity testEntity = new TestEntity("Value1", "Value2"); 
testEntity.PartitionKey = "PartitionKey"; 
testEntity.RowKey = "RowKey"; 
TableOperation insertOperation = TableOperation.Insert(testEntity); 
table.Execute(insertOperation); 

上記の例では、Property1(Value1)のみがテーブルに格納されています。 Property2の値は格納されません。これを保存してセッターをパブリックに変更する唯一の方法です。

+1

それは素晴らしいだろう。 – mjwills

+0

この問題を示すサンプルコードを追加しました。 – mtcup

+0

[Azureテーブルストレージに任意のキー値のペアを格納するにはどうすればいいですか?](https://stackoverflow.com/questions/14595486/how-can-i-store-arbitrary-key-value-pairs-in-あなたのProperty2をWriteEntity()メソッドとReadEntity()メソッドに追加するには、その答えを参照してください。 –

答えて

0

バージョン8.0のTable Storage SDKはカスタム.Netオブジェクトのテーブルストレージへの書き込みと読み取り(プライベートセッターのプロパティを含む)をサポートしているため、ITableEntityインターフェイスをオーバーライドする必要はありません。 SDKでサポートされる方法は複数あります。

カスタムオブジェクトは、ITableEntityインターフェイスを実装する必要はなく、TableEntityクラスから継承する必要もありません。複雑なネストされたプロパティも含めることができます。 IEnumerable型のインデックス付きプロパティ(リスト、配列など)を除き、これらのすべてがサポートされています。あなたがEntityPropertiesのフラット辞書にカスタムの.Netエンティティを変換するためのヘルパーメソッドにTableEntity.Flatten静的メソッドを使用することができます

  1. :だからここ

    はどのようにあります。そのディクショナリでDynamicTableEntityを作成し、テーブルストレージに書き込みます。そのエンティティを同じPK、RKを使用して読み取ってTableEntity.ConvertBack<YourEntityType>メソッドを使用して元のエンティティを再構成することができます。

  2. 第2の代替方法は、SDKのTableEntityAdapterクラスを使用することです。 あなたが、私はここに同様の質問に与えたサンプルの使用の答えを見ることができます: - [MCVE]あなたは私たちに関係するコードの一部を示すことができた場合 Sample writing a generic object to Azure Storage?

+0

TableEntityAdapterを使用して、オブジェクトをテーブルに格納しています。ただし、プライベートセッターのプロパティはテーブルに格納されません。 – mtcup

+0

また、これらのプロパティのgetter(プライベート)を持っているか、または読み込み専用ですか?コードで新しい質問を投稿することをお勧めします。 –

関連する問題