Element '支付订单编号' does not match any field or property of class MongoModels.交易记录.

说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.IO.FileFormatException: Element '支付订单编号' does not match any field or property of class MongoModels.交易记录.

异常信息范例如上文,具体情况是:

  • 储值变化记录 类是个抽象类。
  • 数据库的 储值变化记录 集合中存储着各种 储值变化记录 类的子类。
  • 交易记录 类隶属于 储值变化记录 的子类。
  • 早先的系统中运行一切正常,然而当新增了 支付工费记录 类并且存入数据库后,在查询 交易记录 类型数据时就出现了上述错误。
  • 支付工费记录 类同样隶属于 储值变化记录 的子类,其包含上文错误提示中的 支付订单编号 属性。

这个问题原因很简单,就是因为数据集合中多出了这么几个新的且 交易记录 类没有的字段,结果MongoDB官方驱动就不认了,实在是非常操蛋。

看一下当前集合内的数据:

image

解决办法就是为 交易记录 类添加 BsonIgnoreExtraElements 特性:

    using MongoDB.Bson.Serialization.Attributes;

    [BsonIgnoreExtraElements]
    public class 交易记录 : 储值变化记录
    {
        public Guid 购买款式编号
        {
            get;
            set;
        }

        public string 购买款式名称 { get; set; }

        public override string 描述
        {
            get { return "购买款式模型:" + 购买款式名称; }
        }
    }

这样就没问题了,但是我想说:

这样的特性不是应该默认执行的吗!? 难道要我们为每个类都标注这个特性!?魂淡!!!!!!!

参考:http://www.cnblogs.com/yahle/p/3709816.html

另外此处有人说”可以在字段上加上BsonIgnoreIfNullAttribute属性“,实测不管用,暂不知这个特性能做啥。

转载此文章时须注明转载自”SkyD(斯克迪亚)开发者博客“,并保留此文章的Url链接

作者信息

昵称
斯克迪亚

查看其所发布的所有文章

总积分
2420
注册时间
(2018年5月4日 19:06)

评论

目前还没有任何评论。

[切换到移动版页面]