【问题标题】:C# MongoDB deserialization of id propertyid 属性的 C# MongoDB 反序列化
【发布时间】:2016-07-22 12:59:46
【问题描述】:

我有一个如下所示的课程:

public class Object
{
    [JsonConverter(typeof(ObjectIdConverter))]
    public ObjectId Id { get; set; }
    public List<Record> Records { get; set; }
}

public class Record
{
    [JsonConverter(typeof(ObjectIdConverter))]
    public ObjectId Id { get; set; }
    public Dictionary<string, object> Values { get; set; }
}

我正在尝试反序列化以下 json:

{{
  "Id": "5791fad6fcef4434d0318d69",
  "Values": {
    "Name": "some name....",
    "Account": {
      "Value": "123",
      "Name": "Test Account"
    }
  }
}}

使用 mongodb c# 驱动:

var record = MongoDB.Bson.Serialization.BsonSerializer.Deserialize<Record>(BsonDocument.Parse(value.ToString()));

但我一直收到错误消息:元素“Id”与 Record 类的任何字段或属性都不匹配。

关于它为什么无法识别 id 属性的任何想法?

【问题讨论】:

    标签: c# json mongodb


    【解决方案1】:

    事实证明,如果将属性名称更改为以下内容,则该对象被正确反序列化:

    public ObjectId _id { get; set; }
    

    【讨论】:

      【解决方案2】:

      尝试将 BsonId 属性添加到您的 Id 字段。

      public class Object
      {
          [BsonId]
          [JsonConverter(typeof(ObjectIdConverter))]
          public ObjectId Id { get; set; }
      
          public List<Record> Records { get; set; }
      }
      

      【讨论】:

      • 不幸的是,这不起作用。我已将 BsonId 属性添加到 Object 和 Record 类中,并且出现相同的错误
      • 我不明白,在使用 [BsonId] 的同时应该如何使用反序列化器?那不可能吗?大问题。这将要求我从我的对象中删除所有 [BsonId],然后将所有 id 字段从“Id”重命名为“_id”,这就是从一开始就使用 [BsonId] 的原因,我不不希望我的 id 字段被命名为 _id。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-19
      • 1970-01-01
      • 2010-10-31
      • 1970-01-01
      相关资源
      最近更新 更多