首页 > 解决方案 > 为什么忽略默认约定不适用于 mongodb c# 中的嵌套子属性?

问题描述

我有两个 POCO 对象:

class A
{
    public string Title { get; set; }
    public B Child { get; set; }
}

class B
{
    public string Name { get; set; }
    public string ShouldBeIgnored { get; set; }
}

给定以下 JSON POST 对象:

{
    "child": {
        "name": "foo"
    }
}

这正确地评估了我的 C# 模型,其中缺少属性的值为空。

我想将其转换为 BsonDocument,因此我正在myObject.ToBsonDocument()这样做。

我已经注册了以下约定:

ConventionRegistry.Register("IgnoreIfDefault",
            new ConventionPack { new IgnoreIfDefaultConvention(true) },
            t => true);

我希望忽略父对象和子对象(A 和 B)上的所有默认值属性,但产生的结果如下:

{
    "Child" : {
        "_t" : "B",
        "Name" : "foo",
        "ShouldBeIgnored" : null
    }
}

为什么会忽略父默认值而不忽略子值?

标签: c#.netmongodb.net-core

解决方案


更新

解决了这个问题。

我在注册约定之前注册了我的类映射以忽略默认值,因此生成了一个不忽略空值的类映射,它优先于约定。更改应用程序启动生命周期以注册约定首先解决了该问题。


推荐阅读