各个元素的GetBSON方法[Go + mgo]

时间:2015-06-26 14:09:09

标签: go bson mgo

在Go中,我得到了json编组/解组。如果结构或类型具有MarshalJSON方法,则在另一个具有前者作为字段的结构上调用json.Marshal时,将调用结构的MarshalJSON方法。因此,从我收集和实践中看到的......

  1. type MyType struct有一个MarshalJSON方法来编组一个字符串。
  2. type MyDocument structMyType作为字段。
  3. json.Marshal()上致电MyDocument时,由于MyType实施json.Marshallerbson.Getter字段将被整理为字符串。
  4. 我正在尝试使我的系统与数据库无关,并且正在使用mgo驱动程序为MongoDB实现一项服务,这意味着在所有结构上实现bson.Settertype Currency decimal.Decimal以及我想要编组的所有内容具体方式。这是令人困惑的地方。

    因为Go没有原生定点算术,所以我使用Shopspring的十进制包(找到here)来处理货币值。完美地对JSON进行十进制编组,但我有一个命名类型/* Implements the bson.Getter interface. */ func (c Currency) GetBSON() (interface{}, error) { f, _ := decimal.Decimal(c).Float64() return f, nil } /* Implements the bson.Setter interface. */ func (c *Currency) SetBSON(raw bson.Raw) error { var f float64 e := raw.Unmarshal(&f) if e == nil { *c = Currency(decimal.NewFromFloat(f)) } return e } ,我无法将其编组到BSON。

    这些是我的实现,它将小数转换为float64并尝试编组,就像我为json所做的那样:

     //Following is the Constructor
        public UnitOfWork(IEmployeeContext context)
        {
            this._context = context;
        }
    
        #endregion
    
        public void Dispose()
        {
            this._context.Dispose();
        }
    
        public void Commit()
        {
            this._context.SaveChanges();
        }
    
        public IEmployeeRepository EmployeeRepository
        {
            {
            return _employeeRepository??
                (_employeeRepository= new EmployeeRepository(_context));
        }
    
        }
    

    只有问题出在bson包的文档中:

      

    Marshal序列化in值,可以是map或struct value。

    因为它不是结构或地图,所以只生成一个空文档。

    我只是试图编组一些数据,这些数据只需要作为较大结构的一部分进行编组,但该程序包只允许我在整个文档中执行此操作。我该怎么做才能得到我需要的结果?

0 个答案:

没有答案