未知的鉴别器值“SqlException”,如何忽略动态类型的鉴别器
Posted
技术标签:
【中文标题】未知的鉴别器值“SqlException”,如何忽略动态类型的鉴别器【英文标题】:Unknown discriminator value "SqlException", How to ignore discriminator on dynamic type 【发布时间】:2022-01-16 12:52:35 【问题描述】:我有一个如下模型:
[BsonIgnoreExtraElements]
public class MongoDbLogModel
public string Level get; set;
public string RenderedMessage get; set;
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime? Timestamp get; set;
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime UtcTimeStamp get; set;
public dynamic Properties get; set;
public dynamic Exception get; set;
这是 JSON 模型:
"_id": "$oid": "61a8dadd1ab0e48d55b06626" ,
"Level": "Error",
"UtcTimeStamp": "$date": "2021-12-02T14:40:30.436Z" ,
"MessageTemplate": ...,
"RenderedMessage": "",
"Properties": ...,
"Exception":
"_t": "SqlException",
"HelpLink": null,
"Source": "Core Microsoft SqlClient Data Provider",
"HResult": -2146232060,
"Message": "Invalid object name 'SystemControlLogs'.",
"StackTrace": " at Microsoft.Data.SqlClien",
"Data": ...
这里是my code 获取日志数据:
var logs = await _collection
.Find(builder)
.Skip(count * page)
.Limit(count)
.SortByDescending(entry => entry.Timestamp)
.ToListAsync();
我在反序列化数据时遇到Unknown discriminator value "SqlException"
异常。有什么方法可以不为Exception
属性创建模型来消除该异常? (我试过BsonClassMap.RegisterClassMap<MongoDbLogModel>();
,但没有运气)。
【问题讨论】:
您的 JSON 末尾是否有太多
?
嗨 Mohsen :) 你达到了 10k
【参考方案1】:
您可能有一个在运行时检查的类型。我认为 MongoDB 驱动程序不支持动态(尽管尚未正式声明),推荐的解决方案是使用 BsonDocument。
Mixing Static and Dynamic Data - official documentation
我不确定 BsonDocument 是否适用于您,但此解决方案是最简单的解决方案:
[BsonIgnoreExtraElements]
public class MongoDbLogModel
public string Level get; set;
public string RenderedMessage get; set;
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime? Timestamp get; set;
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime UtcTimeStamp get; set;
//changed line
[BsonElement("Properties")]
public BsonDocument Properties get; set;
//changed line
[BsonElement("Exception")]
public BsonDocument Exception get; set;
Working code
如果 BsonDocument 不能满足您的目的。您必须实现自定义序列化程序。像这样的东西: Serialize dynamic data with mongodb
【讨论】:
以上是关于未知的鉴别器值“SqlException”,如何忽略动态类型的鉴别器的主要内容,如果未能解决你的问题,请参考以下文章
我可以使用 Entity Framework 4 CTP5 访问 TPH 映射中的鉴别器值吗
java.sql.SQLException:Io 异常:指定了未知主机
com.ibm.db2.jcc.b.SqlException:无效参数:未知列名 COL1
java.sql.SQLException:目标:commerce.0.primary:vttablet:rpc 错误:代码 = InvalidArgument desc = 未知系统变量 'quer