将用户定义的CLR对象序列化为Azure存储表

时间:2013-08-24 16:39:12

标签: c# serialization azure azure-storage protobuf-net

如果我有一个用户定义的CLR对象都继承自TableEntity,例如这些CLR:

public class Person : TableEntity
{
   public string FirstName { get; set; }
   public string Prefix { get; set; }
   public string LastName { get; set; }
   public string EmailAddress { get; set; }
   public Address Address { get; set; }
   public List<string> AList { get; set; }
   public List<Urls> ListUrls { get; set; }
}

public class Address : TableEntity
{
   public string Street { get; set; }
   public string Zipcode { get; set; }
   public string HouseNumber { get; set; }
   public string City { get; set; }
}

public class Urls : TableEntity
{
   public Uri Real { get; set; }
   public Uri Fake { get; set; }
}

注意:我知道属性和类必须使用Protobuf-net的属性进行修饰。但为了保持简单,我暂时将它们排除在外。

我想使用byte[]将其转换为Protobuf-net并将其序列化为Windows Azure存储,并将其反序列化为这些CLR对象。我怎么能做到这一点?

我遵循了this教程,但我遇到了byte[]。我不知道如何只在桌子上写byte[]

如果问题不明确,请告诉我,我会尝试更清楚。

2 个答案:

答案 0 :(得分:0)

使用TableEntity的Azure存储是一个完整的框架。我建议尝试同时做两件事都是有问题的。也许将这两件事分开。例如:

public class Person { // note no base class
    //...
}

现在通过MemoryStream序列化以获取你的byte [](maojg肯定使用ToArray(),而不是GetBuffer())。

然后分开:

public class PersonBlob : TableEntity {
    public byte[] Data {get;set;}
}

(你甚至可以在这里使用泛型来同时支持所有类型,但我不确定)。

你也可以添加ToPerson / FromPerson实用程序方法,以便在两者之间进行。

有用吗?

答案 1 :(得分:0)

我通过创建CLR对象的精确副本来修复它,并使它们继承自TableEntity以进行序列化。