【问题标题】:Deserialize a nested struct with MongoDB C# driver使用 MongoDB C# 驱动程序反序列化嵌套结构
【发布时间】:2014-06-03 20:41:02
【问题描述】:

我序列化这个 Kontejner 类没有问题。

public struct Dimenzije
{
    public double duzina, sirina, visina;
    public Dimenzije(double d, double s, double v)
    {
        duzina = d; sirina = s; visina = v;
    }
}

public class Kontejner
{

    [BsonId]
    public string Id { get; set; }

    public string Opis { get; set; }
    public Dimenzije Dimenzije { get; set; }

    [BsonElement]
    public double Zapremina
    {
        get
        {
            return Dimenzije.duzina * Dimenzije.sirina * Dimenzije.visina;
        }
    }

    public bool Cvrsti { get; set; }
    public bool Tecni { get; set; }
    public bool Rasuti { get; set; }
}

当我尝试反序列化它时,它无法反序列化 Dimenzije 字段。

我知道这是一个mapping 问题,但我迫于压力要找到一个快速的答案,而且我在 MongoDB 文档中没有看到它。提前致谢。

【问题讨论】:

  • Dimenzije 是类还是结构体?
  • 它是一个结构体。将其更改为课程有帮助吗?
  • 我是这么想的。尝试没有坏处。 MongoCSharp 驱动程序文档中没有太多关于结构数据类型的信息。我认为这确实是为什么你不能反序列化它的故障。
  • 实际上,我的错,如果做得好,它就会发生。我会发布一个答案。

标签: c# mongodb serialization


【解决方案1】:

我把 Dimenzije 改成了一个类而不是结构体,像这样:

public class Dimenzije
{
    public Dimenzije() { }
    public Dimenzije(double d, double s, double v)
    {
        duzina = d; sirina = s; visina = v;
    }
    public double duzina{get; set;}
    public double sirina{get; set;}
    public double visina{get; set;}

}

它按预期工作。注意Dimenzije() 构造函数的存在!

【讨论】:

  • 希望压力释放。恭喜。 :)
  • 另外,你不需要那个构造函数。如果您的构造函数什么都不做,那么您甚至不需要编写它。在 C# 中默认创建一个空的构造函数。
  • 是的,我知道。 Dimenzije(double d, double s, double v) 做其他事情。干杯,伙计:)
  • 这绝对不会回答有关如何使用 MongoDB 驱动程序反序列化结构的原始问题。将结构更改为类是在改变问题,而不是找到解决方案。
猜你喜欢
  • 1970-01-01
  • 2013-09-09
  • 1970-01-01
  • 1970-01-01
  • 2017-05-09
  • 1970-01-01
  • 1970-01-01
  • 2011-10-05
  • 1970-01-01
相关资源
最近更新 更多