ASP.NET MongoDb 非结构化数据异常

ASP.NET MongoDb unstructured data exception

提问人:Mper 提问时间:8/10/2022 最后编辑:Mper 更新时间:8/10/2022 访问量:155

问:

我在 C# ASP.NET 向 MongoDb 发送(部分)非结构化数据时遇到了困难。 如何将包含非结构化数据 (unstructuredInfo) 的字段添加到其他映射的类中?

如果不是 - BsonDocument 或任何其他聪明的解决方案怎么样?我总是使用 BsonDocuments 获得 JsonExceptions。

Get 方法工作正常。我无法让它适用于 Post 方法。我得到 JsonExceptions。

... System.Text.Json.JsonException: The JSON value could not be converted to MongoDB.Bson.BsonDocument. ...

我为测试项目设置了一个快速的 Github 存储库。https://github.com/Maxoper/MongoDbProblem

public class Movie
    {
        [BsonId]
        [BsonRepresentation(BsonType.ObjectId)]
        public string Id { get; set; }
        public string Title { get; set; }
        public int Year { get; set; }
        public string Summary { get; set; } = null;
        public List<string> Actors { get; set; }

        [BsonExtraElements]
        public BsonDocument UnstructuredInfo { get; set; }
    }
public class MoviesService
    {
        private readonly IMongoCollection<Movie> _movies;

        public MoviesService(IOptions<MoviesDatabaseSettings> options)
        {
            var mongoClient = new MongoClient(options.Value.ConnectionString);

            _movies = mongoClient.GetDatabase(options.Value.DatabaseName)
                .GetCollection<Movie>(options.Value.MoviesCollectionName);
        }

        public async Task Create(Movie newMovie) =>
            await _movies.InsertOneAsync(newMovie);

app.MapPost("/api/movies", async (MoviesService moviesService, Movie movie) => 
{
  await moviesService.Create(movie);
    return Results.Ok();
});
C# asp.net MongoDB 异常

评论


答:

1赞 Markus 8/10/2022 #1

问题是JSON无法转换为开箱即用。您可以创建自定义转换器,也可以将属性的类型更改为:BsonDocumentIDictionary<string, object>

[BsonExtraElements]
public IDictionary<string, object> UnstructuredInfo { get; set; }

这样,JSON 序列化程序就不必处理 MongoDB 特定的类,并且您有更好的机会将所有内容都序列化。BsonDocument