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官方驱动就不认了,实在是非常操蛋。
看一下当前集合内的数据:
解决办法就是为 交易记录 类添加 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链接
目前还没有任何评论。