键入';MyClass';不能从未标记有DataContractAttribute或Serializable
本文关键字:DataContractAttribute Serializable MyClass 不能 键入 | 更新日期: 2023-09-27 18:29:00
当我尝试序列化从TableEntity
:派生的实体时,会收到此错误消息
类型"MyClass"不能从未标记有DataContractAttribute或SerializableAttribute的类型继承。请考虑使用DataContractAttribute或SerializableAttribute标记基类型"Microsoft.WindowsAzure.Storage.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
返回MSSQL并放弃Azure表存储作为解决方案。只是因为它有太多的局限性。
一种方法是覆盖它:
public new byte[] SomeByteArray { get; set; }
然后可以使用IgnoreDataMember
属性忽略它。