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

C# 将用户定义的CLR对象序列化到Azure存储表,c#,serialization,azure,azure-storage,protobuf-net,C#,Serialization,Azure,Azure Storage,Protobuf Net,如果我有一个从TableEntity继承的用户定义的CLR对象,例如这些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

如果我有一个从TableEntity继承的用户定义的CLR对象,例如这些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的属性和类必须用属性修饰。但为了简单起见,我暂时没有提到这些

我想使用Protobuf net将其转换为字节[],并将其序列化到Windows Azure存储,然后将其反序列化回这些CLR对象。我怎样才能做到这一点

我遵循了教程,但我被字节[]卡住了。我不知道如何只向表中写入一个字节[]


如果问题不清楚,请告诉我,我将尝试进行更多的澄清。

Azure storage with TableEntity是一个完整的框架。我想说的是,试图同时做这两件事是有问题的。也许把这两件事分开。例如:

public class Person { // note no base class
    //...
}
现在通过MemoryStream将其序列化,以获取字节[]maojg,确保使用ToArray,而不是GetBuffer

然后分别:

public class PersonBlob : TableEntity {
    public byte[] Data {get;set;}
}
您甚至可以在这里使用泛型同时支持所有类型,但我不确定

您还可以添加ToPerson/FromPerson实用程序方法来介于两者之间


有什么用吗?

我通过创建CLR对象的精确副本修复了它,并使它们从TableEntity继承用于序列化。

看起来很棒!你说我甚至可以使用泛型。你这是什么意思?public List AList{get;set;}不支持序列化吗?@Quoter我的意思是:public class EntityBlob-of-t:TableEntity{public byte[]Data{get;set;}}我正在尝试您的解决方案,而To.Array方法总是返回0字节。当我查看Azure表时,整个对象被保存,而不仅仅是数据字节[]。知道哪里出了问题吗?@Quoter a:0字节表示没有数据-您是否将任何成员标记为ProtoMember等?CLR对象中有数据。一切都充满了。是的,我把所有人都标记为原始成员。我想我知道出了什么问题。我必须包含太多的驱动程序和接口。但无法添加这些类库项目的引用,因为它会导致来自VS2013或类似内容的“循环引用”消息。