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

问题描述 投票:0回答:1

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

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

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

之前的几个步骤,我从任何 api 资源获取数据并将数据转换为我的通用对象

<T>
,如下所示。

var data = (JArray)returnDataFromNetwork.Data;
var order = data.ToObject<T>()

我在将实体插入到 mongodb 时出现错误

_orderRepository.InsertAsync(new Order
  {
    OrderData = order,
  });
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; }
}

感谢您的支持,

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

c# .net mongodb mongodb-.net-driver
1个回答
0
投票

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

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

解决方法:

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

© www.soinside.com 2019 - 2024. All rights reserved.