如果我試圖序列正常的CLR對象,我不希望特定成員變量序列化,我可以用Azure表服務實體是否具有等效的NonSerializedAttribute?
[NonSerialized]
屬性標記它。如果我正在創建表服務實體,是否有可用於告訴Azure表服務忽略此屬性的等效屬性?
如果我試圖序列正常的CLR對象,我不希望特定成員變量序列化,我可以用Azure表服務實體是否具有等效的NonSerializedAttribute?
[NonSerialized]
屬性標記它。如果我正在創建表服務實體,是否有可用於告訴Azure表服務忽略此屬性的等效屬性?
對於2.1版本有一個新的微軟。 WindowsAzure.Storage.Table.IgnoreProperty屬性。有關更多信息,請參閱2.1發行說明:http://blogs.msdn.com/b/windowsazurestorage/archive/2013/09/07/announcing-storage-client-library-2-1-rtm.aspx。
沒有我知道的等價物。
這個帖子說,你如何能達到預期的效果 - http://blogs.msdn.com/b/phaniraj/archive/2008/12/11/customizing-serialization-of-entities-in-the-ado-net-data-services-client-library.aspx
另外,如果你可以逃脫使用「內部」,而不是你的財產,然後它不會與目前的SDK堅持「公」 (但這可能會在未來發生變化)。
對於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; }
}