我有一个ASP.NET api来处理到Mongo数据库的数据。我还需要为一些文档发送一些动态/不规则数据,这将有一些额外的字段。
基本上,我试图重新创建本教程中的代码
但是,当我试图发布或获得该应用程序将冻结,但没有错误或崩溃。
自负的截图包括,这就是它的冻结方式,解冻的唯一方法就是从VS重新启动应用程序。
类代码:
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; }
}它可以很好地处理静态字段,但是由于数据库将接收的数据的性质,我也需要一些动态字段。或者,还有其他方法来实现这一点吗?
发布于 2022-06-01 19:16:59
通过邮递员运行这个程序给了我一个错误代码:
无法将“MongoDB.Bson.BsonString”类型的对象强制转换为键入“MongoDB.Bson.Bsonboole”。
我会标记这是解决了,因为这是我最初的问题,试图找到。
发布于 2022-09-04 18:42:26
通常,我认为您可以启用Swagger、Swagger转换和生成整个BsonDocument对象(太重),以避免这个挂起并接受通过MongoDB.Driver将动态参数传递给对象(文档):
System.Text.Json作为默认值Dictionary<string, object>当使用对象值或任何类型的对象都是JsonElement Microsoft文档,并且很难处理所有道具并传递到MongoDB.Driver插入时,我们应该序列化或ToString,然后解析到BsonDocument示例
//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);
}https://stackoverflow.com/questions/72464946
复制相似问题