提问人:Mper 提问时间:8/10/2022 最后编辑:Mper 更新时间:8/10/2022 访问量:155
ASP.NET MongoDb 非结构化数据异常
ASP.NET MongoDb unstructured data exception
问:
我在 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();
});
答:
1赞
Markus
8/10/2022
#1
问题是JSON无法转换为开箱即用。您可以创建自定义转换器,也可以将属性的类型更改为:BsonDocument
IDictionary<string, object>
[BsonExtraElements]
public IDictionary<string, object> UnstructuredInfo { get; set; }
这样,JSON 序列化程序就不必处理 MongoDB 特定的类,并且您有更好的机会将所有内容都序列化。BsonDocument
评论