未知的鉴别器值“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”,如何忽略动态类型的鉴别器的主要内容,如果未能解决你的问题,请参考以下文章

JPA:继承 - 生成的 SQL 中未考虑鉴别器值

我可以使用 Entity Framework 4 CTP5 访问 TPH 映射中的鉴别器值吗

未找到鉴别器键时的 Mongoid 行为

java.sql.SQLException:Io 异常:指定了未知主机

com.ibm.db2.jcc.b.SqlException:无效参数:未知列名 COL1

java.sql.SQLException:目标:commerce.0.primary:vttablet:rpc 错误:代码 = InvalidArgument desc = 未知系统变量 'quer