2013-08-24 6 views
1

나는 모든 예를 들어이 CLR의, 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을 사용하여 이것을 byte[]으로 변환하고이를 Windows Azure 저장소에 직렬화하고이 CLR 개체로 다시 역 직렬화합니다. 이것을 어떻게 할 수 있습니까?

나는 this 튜토리얼을 따라 갔지만, byte[]으로 막혔습니다. 나는 테이블에 byte[]을 쓰는 법을 모른다.

질문이 명확하지 않은 경우 더 명확히하려고 노력하겠습니다.

답변

0

CLR 개체의 정확한 복사본을 만들어 고정시키고이를 직렬화를 위해 TableEntity에서 상속했습니다.

0

TableEntity를 사용한 Azure 저장소는 전체 프레임 워크입니다. 나는 동시에 두 가지를 시도하는 것이 문제가된다는 것을 제안합니다. 아마 두 가지를 분리하십시오. 예를 들어 :

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

는 이제 바이트 []를 얻을 수 MemoryStream을 통해 그 직렬화() ToArray를 (사용하십시오 maojg하지 GetBuffer()). 그리고 별도로

:

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

(당신도 한 번에 모든 유형을 지원하기 위해 여기에 제네릭을 사용할 수 있습니다,하지만 난 확실히 모른다).

ToPerson/FromPerson 유틸리티 메소드를 추가하여 둘 사이에 전달할 수도 있습니다.

어떤 용도로 사용 하시겠습니까?

+0

멋지다! 당신은 제네릭을 사용할 수도 있다고 말 했어요. 그게 무슨 소리 니? is not public 목록 AList {get; 세트; }'직렬화를 지원합니까? – Quoter

+0

@Quoter 공용 클래스 EntityBlob-of-T : TableEntity {public byte [] Data {get; set;}} –

+0

해결 방법을 시도하고 To.Array() 메서드는 항상 0 바이트를 반환합니다. Azure 테이블을 볼 때 데이터 바이트 대신에 전체 개체가 저장되었습니다. 어떤 생각이 잘못 될지 모릅니다. – Quoter