gpt4 book ai didi

c# - Protobuf-net 序列化值超出范围的枚举

转载 作者:行者123 更新时间:2023-11-30 13:58:51 26 4
gpt4 key购买 nike

C# 允许将任何整数值分配给枚举。

当我尝试使用值超出范围的枚举字段序列化(通过 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 属性)的情况下执行此操作?

最佳答案

有几种方法可以告诉它简化规则;正如 Ravadre 指出的那样,[Flags] 会自动禁用验证 - 它会导致 EnumPassthru 切换。您也可以手动执行此操作 - 只要它是之前您开始序列化/反序列化:

RuntimeTypeModel.Default[typeof(PersonLevel)].EnumPassthru = true;

其中有描述:

/// <summary>
/// Gets or sets a value indicating that an enum should be treated directly as an int/short/etc, rather
/// than enforcing .proto enum rules. This is useful *in particular* for [Flags] enums.
/// </summary>

关于c# - Protobuf-net 序列化值超出范围的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15155311/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com