收到“未配置为此 ObjectSerializer 实例的允许类型”序列化错误

mrk*_*yak 14 .net c# mongodb mongodb-.net-driver

我正在从事一个集成项目。将实体插入 mongodb 时出现错误。

错误消息返回以下字符串:

MongoDB.Bson.BsonSerializationException:“序列化类 Order 的 OrderData 属性时发生错误:类型 MarketplaceOrder 未配置为此 ObjectSerializer 实例的允许类型。'

之前几步,我从任何 api 资源获取数据并将数据转换为我的通用对象,<T>如下行所示。

var data = (JArray)returnDataFromNetwork.Data;
var order = data.ToObject<T>()
Run Code Online (Sandbox Code Playgroud)

将实体插入 mongodb 时出现错误

_orderRepository.InsertAsync(new Order
  {
    OrderData = order,
  });
Run Code Online (Sandbox Code Playgroud)
public class Order
{
  public object OrderData { get; set; }
}

public class MarketplaceOrder
{
  [JsonProperty("marketplace")]
  public string Marketplace { get; set; }

  [JsonProperty("account_id")]
  public int AccountId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

感谢您的支持,

我试图解释的所有事情都是关于“hangfire”(后台服务)项目的。首先,我在服务器控制台上收到此错误消息。然后我尝试在本地调试以了解问题所在。我无法理解错误消息的详细信息。

dod*_*odo 25

我认为你使用 2.19 .net 驱动程序。请参阅发行说明以及您的问题的描述。

ObjectSerializer 已更改为仅允许反序列化被认为安全的类型。哪些类型被认为是安全的,由新的可配置的AllowedTypes函数(类型为Func<Type, bool>)确定。默认的AllowedTypes函数是ObjectSerializer.DefaultAllowedTypes,它对于我们认为安全的许多众所周知的框架类型返回true。一个典型的示例可能是允许所有默认允许的类型以及您自己的类型。这可以通过以下方式完成:

解决方案:

var objectSerializer = new ObjectSerializer(type => ObjectSerializer.DefaultAllowedTypes(type) || type.FullName.StartsWith("MyNamespace")); BsonSerializer.RegisterSerializer(objectSerializer);

  • 快速说明,您不认为这是一个重大变化吗?标记新版本 2.19 对我来说似乎很奇怪 (16认同)
  • 那真是太令人震惊了......:- ( (4认同)