C#允許將任何整數值分配給枚舉。Protobuf-net序列化值超出範圍的枚舉
當我嘗試序列化(通過protobuf網)與枚舉字段的值超出範圍,它拋出異常:沒有線值映射到枚舉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)?
@馬爾欽 - deputala你應該小心使用枚舉值像未知。如果你在多個枚舉上使用它,並在同一個類中使用兩個或更多的枚舉,你將會看到類似這樣的錯誤:'MyClass.proto:67:4:「Unknown」已經被定義。請注意,枚舉值使用C++範圍規則,這意味着枚舉值是它們類型的兄弟,而不是它的子類。因此,「未知」在全局範圍內必須是唯一的,而不僅僅是在「PersonLevel」內。「我目前正試圖弄清楚如何廣泛使用該模式的大型遺留代碼庫。 – 2017-07-28 10:15:10
也許你可以告訴protobuf-net把枚舉當作字符串? @ marc-gravell可能會知道......或者能夠提出另一種解決方案。 – 2017-07-28 10:17:58