C#에서는 열거 형에 정수 값을 할당 할 수 있습니다.Protobuf-net은 값이 범위를 벗어난 열거 형을 직렬화합니다.
값이 범위를 벗어난 열거 형 필드를 사용하여 (protobuf-net을 통해) 직렬화하려고하면 예외가 발생합니다. 열거 형 값이 열거 형 PersonLevel에 매핑되지 않습니다.
내 열거 형 PersonLevel에는 Flags 특성이 없습니다.
[ProtoContract(ImplicitFields = ImplicitFields.AllFields)]
public enum PersonLevel
{
Unknown = 1
}
[ProtoContract(ImplicitFields = ImplicitFields.AllFields)]
public class Person
{
...
public PersonLevel PersonLevel { get; set; }
...
}
var ms = new MemoryStream();
var person = new Person
{
...
PersonLevel = (PersonLevel) 500
...
};
Serializer.Serialize(ms, person); //No wire-value is mapped to the enum PersonLevel
비즈니스 오브젝트 (아마도 어떤 protobuf의 attrubutes)을 변경하지 않고 그것을 할 수있는 시설이 있나요?
당신은을 사용하여 조심해야 설명이 있습니다
알 수없는 enum 값. 둘 이상의 열거 형에서이 열거 형을 두 개 이상 사용하면 동일한 클래스에서 열거 형 중 두 개 이상을 사용하면 다음과 같은 오류가 표시됩니다. MyClass.proto : 67 : 4 : "Unknown"이 이미 정의되어 있습니다. MyClass.proto : 67 : 4 : enum 값은 C++ 범위 지정 규칙을 사용합니다. 즉, 열거 형 값은 해당 형식의 형제이며 자식은 아닙니다. 따라서 "Unknown"은 "PersonLevel"내에서만이 아니라 전역 범위 내에서 고유해야합니다. 현재이 패턴을 광범위하게 사용하는 대규모 레거시 코드 기반에 대해 어떻게 할 수 있는지 파악하려고합니다. –
아마도 문자열로 열거 형을 처리하도록 protobuf-net에 알릴 수 있습니까? @ marc-gravell은 아마도 그것을 알게 될 것입니다. 아니면 다른 해결책을 제안 할 수 있습니다. –