У объектов службы Azure table есть эквивалент NonSerializedAttribute?
Если я пытаюсь выполнить сериализацию обычного объекта CLR, и я не хочу, чтобы определенная переменная-член была сериализована, я могу пометить ее с помощью
[NonSerialized]
атрибут. Если я создаю объект служб таблицы, есть ли эквивалентный атрибут, который я могу использовать, чтобы сообщить службам таблицы Azure игнорировать это свойство?
Ответы
Ответ 1
Для версии 2.1 существует новый атрибут Microsoft.WindowsAzure.Storage.Table.IgnoreProperty. См. Примечания к версии 2.1 для получения дополнительной информации: http://blogs.msdn.com/b/windowsazurestorage/archive/2013/09/07/announcing-storage-client-library-2-1-rtm.aspx.
Ответ 2
Нет эквивалента, о котором я знаю.
В этом сообщении говорится, как вы можете добиться желаемого эффекта - http://blogs.msdn.com/b/phaniraj/archive/2008/12/11/customizing-serialization-of-entities-in-the-ado-net-data-services-client-library.aspx
В качестве альтернативы, если вы можете избежать использования "внутреннего", а не "общедоступного" в своей собственности, то он не будет сохраняться с текущим SDK (но это может измениться в будущем).
Ответ 3
Для версии 2.0 SDK для хранения таблиц существует новый способ достижения этого.
Теперь вы можете переопределить метод WriteEntity на TableEntity и удалить все свойства объекта, у которых есть атрибут. Я получаю от класса, который делает это для всех моих объектов, например:
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; }
}