본문 바로가기
다물칸 주소복사
조회 수 104 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form
구분 팁&트릭
출처 내가작성

C#에서는 protocol buffer에서 서드파티에 해당되기 때문에 오픈소스인 protobuf-NET을 사용하는데 이것을 사용하면 

궂이 proto파일을 만들 필요없다. 단, 메시지를 클래스 형태로 구성해야 하는데 이때 구성 속성(?) 중에 Required라던가 Repeated를 써야 할 때 어떻게 하는지 명시된 곳이 왜이리 적은걸까? 


Proto파일 구조이다. 맨밑에 보면 repeated 를 보자. 

message DefaultRepresentations {
  optional int32 Int = 1 [default = 0];
  optional uint32 Uint = 2 [default = 0];
  optional uint32 Byte = 3 [default = 0];
  optional int32 Sbyte = 4 [default = 0];
  optional uint32 Ushort = 5 [default = 0];
  optional int32 Short = 6 [default = 0];
  optional int64 Long = 7 [default = 0];
  optional uint64 Ulong = 8 [default = 0];
  optional float Float = 9 [default = 0];
  optional double Double = 10 [default = 0];
  optional bcl.Decimal Decimal = 11 [default=0];
  optional bool Bool = 12 [default = false];
  optional string String = 13;
  optional DayOfWeek Enum = 14 [default=Sunday];
  repeated bytes Bytes = 15;
repeated string Strings = 16; optional uint32 Char = 17 [default =


C#에서는 이를 다음과 같은 클래스로 명시할 수 있다. 


[ProtoContract]
class DefaultRepresentations
{
  [ProtoMember(1)] int Int;
  [ProtoMember(2)] uint Uint;
  [ProtoMember(3)] byte Byte;
  [ProtoMember(4)] sbyte Sbyte;
  [ProtoMember(5)] ushort Ushort;
  [ProtoMember(6)] short Short;
  [ProtoMember(7)] long Long;
  [ProtoMember(8)] ulong Ulong;
  [ProtoMember(9)] float Float;
  [ProtoMember(10)] double Double;
  [ProtoMember(11)] decimal Decimal;
  [ProtoMember(12)] bool Bool;
  [ProtoMember(13)] string String;
  [ProtoMember(14)] DayOfWeek Enum;
  [ProtoMember(15)] byte[] Bytes;
  [ProtoMember(16)] string[] Strings;
  [ProtoMember(17)] char Char;
}


걍 배열 선언하면 된다. 


Required는 다음과 같이 명시한다. 

[ProtoMember(18, IsRequired = true)]

Public string PID { get; set;}