2010-06-08 4 views
2

내 솔루션에서는 값을 저장하는 public 클래스를 만들고 [DataContract/DataMember] 특성을 이미 선언했습니다. 예를 들어Public 메서드에서 [DataMember (Order = n)] 특성을 선언해야합니까?

,

[DataContract] 
public class MeterSizeInfo 
{ 
    string _meterSizeId; 

    [DataMember(Order = 1)] 
    public string MeterSizeId 
    { 
     get { return this._meterSizeId; } 
     set { this._meterSizeId = value; } 
    } 

    string _meterSizeName; 

    [DataMember(Order = 2)] 
    public string MeterSizeName 
    { 
     get { return this._meterSizeName; } 
     set { this._meterSizeName = value; } 
    } 

}

은 그 때 나는 전체 프로젝트에 노출 다른 공용 메소드를 추가해야합니다. 나는 그것을 위해 [DataMember (Order = 3)]을 추가해야 할까 싶다.

[DataMember(Order = 3)] //<--- must declare or not? 
    public string DoSomething() 
    { 
     // do something... 
    } 

이 난에 저장된 내 데이터를 직렬화 protobuf - 그물에 시리얼을 사용하려는 경우, 내가 그 속성을 선언 할 필요가 있음을 이해합니다. 하지만 나는 그 방법에 대해 확신하지 못합니다.

도와주세요. 미리 감사드립니다.

답변

1

protobuf-net은 값 직렬화 기입니다. 속성을 제외하고 메서드에 대해서는 아무것도 모릅니다. 동일한 (또는 호환되는) 유형을 사용하면 메소드가 자동으로 표시되지만 protobuf-net (또는 다른 직렬화)과는 아무런 관련이 없습니다.

다시 속성을 추가하는 주제; 현재 릴리스에서는 일반적으로 무언가를으로해야 어떤 속성을 직렬화 할 것인지 (더 중요한 것은 : 어떤 식별자로) 알 수 있습니다. 은 암시 적 모드 인이지만, 을 알고있는 경우을 알지 않으면 다시 유형을 변경하지 않을 것을 권장하지 않습니다. 이제까지. 조금도.

"v2"에서 속성을 제거 할 수 있습니다. 이를 위해 외부 모델을 사용하는 옵션이 있습니다, 그래서 당신은 할 수 있습니다

var model = TypeModel.Create(); 
model[typeof(MeterSizeInfo)].Add("MeterSizeId", "MeterSizeName"); 

(정확한 API에 저를 인용하지 않지만, 뭔가 같은)

그런 다음 사용할 수 있습니다 model.Serialize

0

아니요 - 없어야합니다. 메소드를 직렬화 할 수 없습니다!

0

그런 식으로 읽기 쉽고 쓰기 가능한 속성은 없으므로 ... 메소드에 대한 속성을 추가 할 수 없습니다.