这是我们最终实施的方法。短版:序列化对象 2 并将其填充到对象 1 的 Value 属性中,然后放入表存储中。
对象 1:
public class CloudEntity<T>
{
public CloudEntity()
{
Timestamp = DateTime.UtcNow;
}
public string RowKey { get; set; }
public string PartitionKey { get; set; }
public DateTime Timestamp { get; set; }
public T Value { get; set; }
}
对象 2:
public class Store
{
public string StoreId { get; set; }
public string StoreName { get; set; }
public string StoreType { get; set; }
public Address MailingAddress { get; set; }
public PhoneNumber TelephoneNumber { get; set; }
public StoreHours StoreHours { get; set; }
}
对象 3 可以是任何东西……在这种情况下,地址可能……它都被序列化了。
因此,在代码中,您可以按如下方式获取表格(执行此操作的方法不止一种):
var tableStorage = new ReliableCloudTableStorage(connection string you're using);
然后假设您有一个 store() 的实例,您想将其放入表存储中:
var myStore = new Store(
{
storeId = "9832",
storeName = "Headquarters"
...
});
您可以通过以下方式执行此操作:
var cloudEntity = new CloudEntity<string>
{
PartitionKey = whatever you want your partition key to be,
RowKey = whatever you want your row key to be,
Value = JsonConvert.SerializeObject(myStore) // THIS IS THE MAGIC
};
tableStorage.Add<CloudEntity<string>>(name of table in table storage, cloudEntity);
放入表存储中的实体将具有 CloudEntity 类的所有属性(行键、分区键等),并且在“值”列中将有您要存储的对象的 json。它很容易通过 Azure 存储资源管理器读取,这也很好。
要取出对象,请使用以下内容:
var cloudEntity = tableStorage.Get<CloudEntity<string>>(name of your table, partitionKey: whatever the partition key is);
然后,您可以将它们的“值”字段反序列化为您期望的对象:
var myStore = JsonConvert.DeserializeObject<Store>(cloudEntity.Value);
如果你得到一堆回来,只需将 myStore 设为一个列表并循环遍历 cloudEntities,反序列化并将每个添加到您的列表中。
希望这可以帮助!