我有一个枚举
public enum MyEnum : uint
{
ValueA = 1233104067,
ValueB= 1119849093,
ValueC= 2726580491
}
每当我使用此枚举创建一个类并尝试将其存储到数据库中时。 例如
class MyClass {
public MyEnum newValue = MyEnum.ValueC;
}
这会使程序崩溃
Unhandled Exception: System.OverflowException: Value was either too large or too small for an Int32.
at System.Convert.ThrowInt32OverflowException()
at System.UInt32.System.IConvertible.ToInt32(IFormatProvider provider)
at MongoDB.Bson.Serialization.Serializers.EnumSerializer`1.Serialize(BsonSerializationContext context, BsonSerializationArgs args, TEnum value)
它尝试将uint值转换为int,但它们太大而且会抛出异常。
如何解决此问题?
感谢。
答案 0 :(得分:1)
MongoDB将数据存储为BSON,doesn't have unsigned integer types。
您有三种选择:
注释您的未签名类型。
如果使用驱动程序v2.4.3或更早版本:
apiClient.setBasePath('www.docusign.net/restapi');
apiClient.addDefaultHeader('Authorization', 'Bearer ' + token);
docusign.Configuration.default.setDefaultApiClient(apiClient);
const authApi = new docusign.AuthenticationApi();
const loginOps = {
apiPassword: true,
includeAccountIdGuid: true
};
authApi.login(loginOps, function (err, loginInfo, response) {
if (err) {
console.log(err);
}
if (loginInfo) {
// loginInfo returns 'exports {}' so the variables below cannot be set.
const loginAccounts = loginInfo.loginAccounts;
const loginAccount = loginAccounts[0];
const baseUrl = loginAccount.baseUrl;
const accountDomain = baseUrl.split('/v2');
const accountId = loginAccount.accountId;
apiClient.setBasePath(accountDomain[0]);
docusign.Configuration.default.setDefaultApiClient(apiClient);
不幸的是,驱动程序v2.4.4及更高版本中的序列化程序并不重要
public class MyClass
{
[BsonRepresentation(BsonType.Int32, AllowOverflow = true)]
public MyEnum Value1 = MyEnum.ValueC;
[BsonRepresentation(BsonType.Int32, AllowOverflow = true)]
public uint Value2 = uint.MaxValue;
}
,无论如何都要抛出异常(测试和
确认,感谢dnickless指出这一点)。这是一个解决方法
(以牺牲一些浪费的空间为代价):
AllowOverflow
使用签名类型并在适当的时候进行转换。
public class MyClass
{
[BsonRepresentation(BsonType.Int64)]
public MyEnum Value1 = MyEnum.ValueC;
[BsonRepresentation(BsonType.Int64)]
public uint Value2 = uint.MaxValue;
}
手动序列化(UInt32Serializer,UInt64Serializer等)。