system.formatexception:在估算XXX属性的XXX属性时发生错误:未知的歧视器值' jsonelement'

发布于 2025-02-11 22:15:00 字数 3260 浏览 0 评论 0原文

我正在使用MongoDB进行ASP.NET核心项目。

我想从hotelbookingdocument获取预订酒店的列表。

public class HotelBookingDocument
{
    public string Id { get; set; }
    public HotelDocument Hotel { get; set; }
// removed rest 
}

public class HotelDocument
{
    public List<RoomDocument> Rooms { get; set; }
// removed rest 
}

public class RoomDocument
{
      public object SupplierReference { get; set; }
// removed rest 
}
// removed rest 

查询

BsonClassMap.RegisterClassMap<HotelBookingDocument>(cm =>
{
  cm.AutoMap();
  cm.SetIgnoreExtraElements(true);
  cm.MapIdMember(c => c.Id)
    .SetSerializer(new StringSerializer(BsonType.ObjectId))
    .SetIgnoreIfDefault(true);
});

BsonClassMap.RegisterClassMap<HotelBookingDocument.RoomDocument>(cm =>
{
  cm.AutoMap();
});
            BsonClassMap.RegisterClassMap<HotelBookingDocument.HotelDocument>(cm =>
{
  cm.AutoMap();
});

屏幕

public async Task<List<HotelBookingDocument>> GetHotelsList(string transactionId)
{
  var hotels = await HotelBookingCollection.Find(x => x.TransactionId == transactionId).ToListAsync();   // this does not work
  return hotels;
}

数据库中供应权属性的

配置 截图。

"SupplierReference": {
                "_t": "JsonElement"
            },

错误:

System.FormatException: An error occurred while deserializing the Hotel property of class HotelBookingDocument: An error occurred while deserializing the Rooms property of class HotelBookingDocument+HotelDocument: An error occurred while deserializing the SupplierReference property of class HotelBookingDocument+RoomDocument: Unknown discriminator value 'JsonElement'.
---> System.FormatException: An error occurred while deserializing the Rooms property of class HotelBookingDocument+HotelDocument: An error occurred while deserializing the SupplierReference property of class HotelBookingDocument+RoomDocument: Unknown discriminator value 'JsonElement'.
---> System.FormatException: An error occurred while deserializing the SupplierReference property of class HotelBookingDocument+RoomDocument: Unknown discriminator value 'JsonElement'.
---> MongoDB.Bson.BsonSerializationException: Unknown discriminator value 'JsonElement'.
 at MongoDB.Bson.Serialization.BsonSerializer.LookupActualType(Type nominalType, BsonValue discriminator)
 at MongoDB.Bson.Serialization.Conventions.ObjectDiscriminatorConvention.GetActualType(IBsonReader bsonReader, Type nominalType)
 at MongoDB.Bson.Serialization.Serializers.ObjectSerializer.DeserializeDiscriminatedValue(BsonDeserializationContext context, BsonDeserializationArgs args)
 at MongoDB.Bson.Serialization.Serializers.ObjectSerializer.Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
 at MongoDB.Bson.Serialization.Serializers.SerializerBase`1.MongoDB.Bson.Serialization.IBsonSerializer.Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)...............

当我尝试通过Transaction Id从HotelbookingCollection获取酒店书列表时,我会出现错误。 但是我发现酒店书收录的酒店书籍我没有遇到任何错误。我可以第一次获得酒店书。

为什么发生此错误?

请帮助我找到这个问题。

谢谢

I am wokring a asp.net core project with mongoDB.

I want to get the list of booked hotels from HotelBookingDocument.

public class HotelBookingDocument
{
    public string Id { get; set; }
    public HotelDocument Hotel { get; set; }
// removed rest 
}

public class HotelDocument
{
    public List<RoomDocument> Rooms { get; set; }
// removed rest 
}

public class RoomDocument
{
      public object SupplierReference { get; set; }
// removed rest 
}
// removed rest 

Configuration

BsonClassMap.RegisterClassMap<HotelBookingDocument>(cm =>
{
  cm.AutoMap();
  cm.SetIgnoreExtraElements(true);
  cm.MapIdMember(c => c.Id)
    .SetSerializer(new StringSerializer(BsonType.ObjectId))
    .SetIgnoreIfDefault(true);
});

BsonClassMap.RegisterClassMap<HotelBookingDocument.RoomDocument>(cm =>
{
  cm.AutoMap();
});
            BsonClassMap.RegisterClassMap<HotelBookingDocument.HotelDocument>(cm =>
{
  cm.AutoMap();
});

Query

public async Task<List<HotelBookingDocument>> GetHotelsList(string transactionId)
{
  var hotels = await HotelBookingCollection.Find(x => x.TransactionId == transactionId).ToListAsync();   // this does not work
  return hotels;
}

Screenshot of SupplierReference Property in Database

Screenshot of SupplierReference Property in Database

Why this "_t": "JsonElement" did add automatically?

"SupplierReference": {
                "_t": "JsonElement"
            },

Error:

System.FormatException: An error occurred while deserializing the Hotel property of class HotelBookingDocument: An error occurred while deserializing the Rooms property of class HotelBookingDocument+HotelDocument: An error occurred while deserializing the SupplierReference property of class HotelBookingDocument+RoomDocument: Unknown discriminator value 'JsonElement'.
---> System.FormatException: An error occurred while deserializing the Rooms property of class HotelBookingDocument+HotelDocument: An error occurred while deserializing the SupplierReference property of class HotelBookingDocument+RoomDocument: Unknown discriminator value 'JsonElement'.
---> System.FormatException: An error occurred while deserializing the SupplierReference property of class HotelBookingDocument+RoomDocument: Unknown discriminator value 'JsonElement'.
---> MongoDB.Bson.BsonSerializationException: Unknown discriminator value 'JsonElement'.
 at MongoDB.Bson.Serialization.BsonSerializer.LookupActualType(Type nominalType, BsonValue discriminator)
 at MongoDB.Bson.Serialization.Conventions.ObjectDiscriminatorConvention.GetActualType(IBsonReader bsonReader, Type nominalType)
 at MongoDB.Bson.Serialization.Serializers.ObjectSerializer.DeserializeDiscriminatedValue(BsonDeserializationContext context, BsonDeserializationArgs args)
 at MongoDB.Bson.Serialization.Serializers.ObjectSerializer.Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
 at MongoDB.Bson.Serialization.Serializers.SerializerBase`1.MongoDB.Bson.Serialization.IBsonSerializer.Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)...............

when I try to get list of hotelBookings from HotelBookingCollection by transactionId, I got above error.
But I find a hotelBooking from HotelBookingCollection i did not get any error. I can get first hotelBooking.

Why this error occur?

Please help me to find the issue.

Thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文