【发布时间】:2013-08-29 01:37:42
【问题描述】:
当我尝试序列化派生自 TableEntity 的实体时收到此错误消息:
类型“MyClass”不能继承自未用 DataContractAttribute 或 SerializableAttribute 标记的类型。考虑使用 DataContractAttribute 或 SerializableAttribute 标记基类型“Microsoft.WindowsAzure.Storage.Table.TableEntity”,或从派生类型中删除它们。
错误消息非常清楚地表明出了什么问题。
所以我的问题是,我该如何解决 DataContractAttribute 没有在 TableEntity 类中被装饰的问题?
代码:
[DataContract]
public class MyClass : MyOwnTableEntity
{
[DataMember]
public string Name { get; set; }
[DataMember]
public string Email { get; set; }
}
我需要将MyClass 序列化为byte[] 并将其保存到表存储中。
public class MyClassAsByteArray : MyOwnTableEntity
{
public byte[] SomeByteArray { get; set; }
}
如果有人对如何将其序列化为byte[] 有任何建议,请告诉我。
[编辑]
我决定创建自己的可序列化TableEntity:
[DataContract]
public class MyOwnTableEntity : ITableEntity
{
private TableEntity te = new TableEntity();
public MyOwnTableEntity ()
{
}
public MyOwnTableEntity (string partitionKey, string rowKey)
{
this.PartitionKey = partitionKey;
this.RowKey = rowKey;
}
public string PartitionKey { get; set; }
public string RowKey { get; set; }
public DateTimeOffset Timestamp { get; set; }
public string ETag { get; set; }
public virtual void ReadEntity(IDictionary<string, EntityProperty> properties, OperationContext operationContext)
{
te.ReadEntity(properties, operationContext);
}
public virtual IDictionary<string, EntityProperty> WriteEntity(OperationContext operationContext)
{
return te.WriteEntity(operationContext);
}
}
然后我从这个类派生,但它无法将MyClass 和MyClassAsByteArray 的属性写入存储表。那是因为我创建了一个TableEntity 的新对象。
如何将MyOwnTableEntity中传递给ReadEntity和WriteEntity的参数转发到实际TableEntity类中的ReadEntity和WriteEntity方法?
微软已经编写了代码,所以我想避免在这里重新发明轮子。
编辑 见TableEntity.cs
【问题讨论】:
-
你对
TableEntity类有控制权还是代码生成的? -
嗨,不,我无法控制它。它来自微软。查看命名空间:
Microsoft.WindowsAzure.Storage.Table.TableEntity. -
还有其他人可以帮助我吗?
标签: c# interface azure-storage datacontractserializer