首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP MongoDB Api在使用BSON额外元素标记时冻结。

ASP MongoDB Api在使用BSON额外元素标记时冻结。
EN

Stack Overflow用户
提问于 2022-06-01 16:03:53
回答 2查看 129关注 0票数 0

我有一个ASP.NET api来处理到Mongo数据库的数据。我还需要为一些文档发送一些动态/不规则数据,这将有一些额外的字段。

基本上,我试图重新创建本教程中的代码

动态/

但是,当我试图发布或获得该应用程序将冻结,但没有错误或崩溃。

自负的截图包括,这就是它的冻结方式,解冻的唯一方法就是从VS重新启动应用程序。

类代码:

代码语言:javascript
复制
public class Incident
{
    [BsonId]
    [BsonRepresentation(BsonType.ObjectId)]
    public string? Id { get; set; }

    [BsonElement("Name")] 
    public string? Name { get; set; }

    [BsonExtraElements]
    public BsonDocument? Additional { get; set; }
}

它可以很好地处理静态字段,但是由于数据库将接收的数据的性质,我也需要一些动态字段。或者,还有其他方法来实现这一点吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-01 19:16:59

通过邮递员运行这个程序给了我一个错误代码:

无法将“MongoDB.Bson.BsonString”类型的对象强制转换为键入“MongoDB.Bson.Bsonboole”。

我会标记这是解决了,因为这是我最初的问题,试图找到。

票数 0
EN

Stack Overflow用户

发布于 2022-09-04 18:42:26

通常,我认为您可以启用Swagger、Swagger转换和生成整个BsonDocument对象(太重),以避免这个挂起并接受通过MongoDB.Driver将动态参数传递给对象(文档):

  • 首先,如果您使用的是dotnet核心,则启用System.Text.Json作为默认值
  • Dictionary<string, object>当使用对象值或任何类型的对象都是JsonElement Microsoft文档,并且很难处理所有道具并传递到MongoDB.Driver插入时,我们应该序列化或ToString,然后解析到BsonDocument

示例

代码语言:javascript
复制
 //pass strong type
     public class Foo
    {

        [BsonId]
        [BsonRepresentation(BsonType.ObjectId)]
        public string? Id { get; set; }

        [Required]
        public string Name { get; set; }
      

        [BsonExtraElements]
        public Dictionary<string, object> Metadata { get; set; }

        public void TranslateMetadata()
        {
            if (this.Metadata is null) return;
            var json = JsonSerializer.Serialize(this.Metadata);
            this.Metadata = BsonDocument.Parse(json).ToDictionary();
        }
    }

// Add
//case 1 :
 public void Add(Foo foo) {
            foo.TranslateMetadata();
            await Context1.InsertOneAsync(foo);
  }




//case2 :  pass object

    public void Add(object foo)  //object from foo
    { 
            var json = foo.ToString();
            this.Metadata = BsonDocument.Parse(json);

            await Context1.InsertOneAsync(foo);
     }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72464946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档