当前位置: 首页 > 知识库问答 >
问题:

ASP NET Core-使用OData与mongoDB-失败的序列化程序

黄鸣
2023-03-14

我试图在ASP NET Core应用程序中集成OData。特殊性是我有一个Mongo DB,我使用Mongo DB驱动程序将我的请求设置为IQueryable;我已经简化了下面的代码,似乎序列化程序mongo失败了

[HttpGet]
[EnableQuery]
public async Task<IActionResult> Index(ODataQueryOptions<Policy> queryOptions)
{
    var client = new MongoClient("mongodb://127.0.0.1:27017");
    var collection = client.GetDatabase("policy-server").GetCollection<Policy>("policy");
    var policies = collection.AsQueryable();
    var query = queryOptions.ApplyTo(policies);
    var s = query.ToString(); // error in toString()
    return Ok(s); 
}

我调用他的URL时出现以下错误[https://localhost:44355/api/policies?$select=isEnabled][1]

ArgumentException:序列化程序的值类型为Microsoft。AspNet。奥达塔。查询表达。PropertyContainer NamedProperty1[[System.Nullable1[[System.Boolean,System.Private.CoreLib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=7cec85d7bea7798e],系统。私有的CoreLib,版本=4.0.0.0,区域性=中性,PublicKeyToken=7cec85d7bea7798e]]并且与Microsoft的成员类型不匹配。AspNet。奥达塔。查询表达。属性容器。(参数“序列化器”)MongoDB。布森。序列化。BsonMemberMap。BsonMemberMap中的SetSerializer(IBMsonSerializer序列化程序)。政务司司长,第480行

有人可以已经混合OData和MongoDB驱动程序?

谢谢

共有1个答案

公良高刚
2023-03-14

query的类型为IQueryable

参见示例

public PageResult<Product> Get(ODataQueryOptions<Product> options)
{
ODataQuerySettings settings = new ODataQuerySettings()
{
    PageSize = 5
};

IQueryable results = options.ApplyTo(_products.AsQueryable(), settings);

return new PageResult<Product>(
    results as IEnumerable<Product>, 
    Request.GetNextPageLink(), 
    Request.GetInlineCount());
}

在里面https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/supporting-odata-query-options

您正在对IEnumerable集合执行ToString()(https://docs.microsoft.com/en-us/dotnet/api/system.linq.iqueryable?view=net-5.0)而forEach将执行以下操作,例如(甚至类似于String.Join(“,”,query.Select(r=

 类似资料:
  • 问题内容: 我正在尝试使用自定义将一些JSON反序列化为各种子类 我几乎遵循了这一点。 我的抽象基类: 而我的派生: 只是一个包含一些字符串常量的静态类。 JSON文件反序列化如下: 现在,我的问题是,每当我运行代码时,都会出现以下错误: 有问题的Json文件如下所示: 在我看来,反序列化嵌套对象有麻烦,我该如何解决? 问题答案: 首先,错过了您的json中的菜单项“ Submenus Test”

  • 问题内容: 我正在尝试使用Northwind OData服务: http://services.odata.org/V3/OData/OData.svc/Products?$format=json 并将其反序列化为一系列产品: 但是序列化器似乎不喜欢该部分,并且事实是那里有2 条记录(不确定它们是什么)。 是否有捷径可寻? 问题答案: 使用Json.Net

  • 我正在使用Jackson的注释生成漂亮的对象图。 瞬态物体有解决方案吗?

  • 我试图将JSON字符串反序列化为Java对象,但遇到以下异常: JsonDeserializer com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter@306A30C7未能对给定类型类java.util.ArrayList的json对象[“93”]进行反序列化 我的主文件: 应该表示JSON的类是: 我尝试了SO上给出的解决方案,但也有

  • 使用com。fasterxml。杰克逊。数据绑定。ObjectMapper类(com.fasterxml.jackson.core:jackson-databind:2.9.5)我正在尝试反序列化以下类的对象: 我目前正在执行的代码如下: 在抛出异常的最后一行失败: 通用域名格式。fasterxml。杰克逊。数据绑定。exc.MismatchedInputException:无法构造com的实例。

  • 我有Spring Boot应用程序: Build.Gradle包含: 和测试 我的意图是使用嵌入式MongoDB进行上述测试。当我运行它时,会弹出以下错误: 2017-03-05 17:14:51.993错误27857--[main]O.S.Boot.SpringApplication:应用程序启动失败 我的应用程序属性: 如何解决这个问题?提前道谢。