【问题标题】:MongoDB C# Driver Saves Empty PropertiesMongoDB C# 驱动程序保存空属性
【发布时间】:2015-04-09 21:15:36
【问题描述】:

我有一个包含大约 500 个属性的 C# 对象,其中一些是复杂类型。 Json 文档是通过 XML 导入的,它可以 100% 工作。我还可以查询集合并成功将 Json 文档序列化为 C# 对象。问题是当我对对象进行更改并使用 collection.Save(object);它为所有 C# 属性创建 Json 属性,即使它们为 NULL,所以现在我的文档如下所示:

    { 
    "_id" : "AA00001", 
    "Product" : {
        "Reference" : "AA00001", 
        "Type" : "02", 
        "Code" : null, 
        "Property 1" : null, 
        "Property 2" : null, 
        "Property 3" : null, 
    .
    .
    .   
}

C#保存之前的原始文档是这样的

{ 
"_id" : "AA00001", 
"Product" : {
    "Reference" : "AA00001", 
    "Type" : "02"
.
.
.   

有没有办法告诉驱动程序不要保存空/空值?

谢谢。

【问题讨论】:

  • 保存空值是因为模型看起来是这样的,如果您尝试从 MongoDB 加载与模型不匹配的数据,MongoDB 驱动程序将抛出异​​常.. 这是我的经验..
  • 嗨,Martin,我的课程有 [IgnoreExtraElements] 属性,所以它只提取匹配的内容。
  • 嘿,我发现有几十个问题询问您如何做。你也许可以通过回答他们来获得一些分数。我在做你在这里所做的事情时遇到了问题。我在一个类模型上有一个字段,它需要接受任何我可以扔给它的东西,但它似乎永远不会正确序列化。有什么建议吗?

标签: c# json mongodb


【解决方案1】:

您可以通过注册一个 ConventionPack 来做到这一点:

var pack = new ConventionPack();
pack.Add(new IgnoreIfNullConvention(true));
ConventionRegistry.Register("ignore nulls",
                            pack,
                            t => true);

IgnoreIfNull 将阻止字段被序列化。还有一个 IgnoreIfDefaultConvention 也适用于值类型。

有关如何注册这些的更多详细信息,您可能希望在 SO 上参考another question

【讨论】:

  • 谢谢,看看这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-13
  • 1970-01-01
  • 2016-03-13
  • 2013-08-16
相关资源
最近更新 更多