2011-02-02 3 views
3

를 사용하는 동안 나는 클래스 아래에있다 : -적합한 기본 형식 인코딩이 없습니다. 직렬화가 protobuf

[Serializable] 
[DataContract(Name = "StateValueWrapper")] 
public class StateValueWrapper 
{ 
    [DataMember(Order = 1)] 
    public Type StateValueType { get; set; } 

    [DataMember(Order = 2)] 
    public object WrappedObj { get; set; } 
} 

내가 오류가 protobuf.net.While의 직렬화를 사용하여 위의 클래스의 객체를 직렬화하려고은 "없음 적합한 기본 유형 인코딩을 찾을 수 없습니다." 이 일을 위해 내가해야 할 일을 제안 해주세요. 다음은 serilization 내 코드입니다 : -

  MemoryStream ms = new MemoryStream(); 
      var srariazeObj = new StateValueWrapper(); 
      srariazeObj.StateValueType = typeof(int); 
      srariazeObj.WrappedObj = 5; 
      ProtoBuf.Serializer.NonGeneric.Serialize(ms, srariazeObj); 

답변

1

Type이 protobuf - 그물을 통해 직렬화 할 수없는, 그리고 둘 object 없습니다. 나는 당신이하려고하는 것을 이해하고, 솔직히 당신이 수 없다면 사전에 유형을 알고. (string) AssemblyQualifiedName과 (MemoryStream을 통해) 객체에 대해 byte[]을 직렬화하는 것을 고려해야합니다. 나중에 당신이 원한다면 (예를 들면) 나에게 예를 들려 줄 수있다.

그러나, 유한 지원해야하는 종류의 손실 (예를 들어, "문자열 또는 INT 또는 고객 또는 GUID ") 상태 후 훨씬 더 효율적이고 편리이 가능한 경우 접근 방식 - 시나리오가 맞다면 다시 한 번 모범을 보일 수 있습니다.

+0

예 Marc 나는 protobuf를 사용하여 직렬화 할 수있는 유형의 유한 집합이 있습니다. 마지막 게시물에서 말한 접근 방식을 공유하면 좋을 것입니다. –

+0

@vivek - 기존 [매우 비슷한 예; 여기] (http://stackoverflow.com/questions/2678249/in-protobuf-net-how-can-i-pass-an-array-of-type-object-with-objects-of-different/2679154#2679154) –

1

이제 사용자 지정 세션 공급자를 만들어 StateValueWrapper 개체에 전달했습니다. 측면에서 serialize 메서드를 먼저 protobuf 사용하여 StateValueWrapper WrappedObj serialize하고 WrappedObj 다시 이제 이진 serializer 형식 정보 및 바이트 배열을 포함하는 내 StateValueWrapper 개체를 serialize합니다. deserialization 먼저 이진 serializer SessionStateItemCollection deserialize 및 형식 정보 및 바이트 배열 StateValueWrapper 반환합니다 다음 StateValueWrapper 형식 정보를 사용하여 WrappedObj deserialization (protobuf) 완료했습니다.

관련 문제