11

通常のCLRオブジェクトをシリアル化しようとしていて、特定のメンバー変数をシリアル化したくない場合は、タグを付けることができます。

[NonSerialized]

属性。テーブルサービスエンティティを作成している場合、Azureテーブルサービスにこのプロパティを無視するように指示するために使用できる同等の属性はありますか?

4

3 に答える 3

9

バージョン 2.1 には、新しい Microsoft.WindowsAzure.Storage.Table.IgnoreProperty 属性があります。詳細については、2.1 リリース ノートを参照してください: http://blogs.msdn.com/b/windowsazurestorage/archive/2013/09/07/announce-storage-client-library-2-1-rtm.aspx

于 2013-10-21T23:53:51.097 に答える
5

私が知っている同等のものはありません。

この投稿では、目的の効果を達成する方法について説明しています - http://blogs.msdn.com/b/phaniraj/archive/2008/12/11/customizing-serialization-of-entities-in-the-ado-net-data -services-client-library.aspx

または、プロパティで「パブリック」ではなく「内部」を使用して回避できる場合、現在の SDK では永続化されません (ただし、これは将来変更される可能性があります)。

于 2011-03-21T19:28:43.760 に答える
5

Table Storage SDK のバージョン 2.0 では、これを実現する新しい方法があります。

TableEntity の WriteEntity メソッドをオーバーライドして、属性を持つエンティティ プロパティを削除できるようになりました。次のように、すべてのエンティティに対してこれを行うクラスから派生します。

public class CustomSerializationTableEntity : TableEntity
{
    public CustomSerializationTableEntity()
    {
    }

    public CustomSerializationTableEntity(string partitionKey, string rowKey)
        : base(partitionKey, rowKey)
    {
    }

    public override IDictionary<string, EntityProperty> WriteEntity(Microsoft.WindowsAzure.Storage.OperationContext operationContext)
    {
        var entityProperties = base.WriteEntity(operationContext);

        var objectProperties = this.GetType().GetProperties();

        foreach (PropertyInfo property in objectProperties)
        {
            // see if the property has the attribute to not serialization, and if it does remove it from the entities to send to write
            object[] notSerializedAttributes = property.GetCustomAttributes(typeof(NotSerializedAttribute), false);
            if (notSerializedAttributes.Length > 0)
            {
                entityProperties.Remove(property.Name);
            }
        }

        return entityProperties;
    }
}

[AttributeUsage(AttributeTargets.Property)]
public class NotSerializedAttribute : Attribute
{
}

次に、このクラスを次のようなエンティティに利用できます

public class MyEntity : CustomSerializationTableEntity
{
     public MyEntity()
     {
     }

     public string MySerializedProperty { get; set; }

     [NotSerialized]
     public List<string> MyNotSerializedProperty { get; set; }
}
于 2013-03-02T21:52:37.227 に答える