C#
2015.08.05 12:42
protobuf-Net 에서 Repeated, Required 클래스 구성방법
다물칸 주소복사
조회 수 104 추천 수 0 댓글 0
구분 | 팁&트릭 |
---|---|
출처 | 내가작성 |
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; |
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;}