func (x *Questionnaire) UnmarshalJSON(data []byte) (err error) {
	x2 := questionnaire{}
	if err = json.Unmarshal(data, &x2); err == nil {
		if x2.Contained != nil {
			for i := range x2.Contained {
				x2.Contained[i] = MapToResource(x2.Contained[i], true)
			}
		}
		*x = Questionnaire(x2)
		return x.checkResourceType()
	}
	return
}
Custom unmarshaller to properly unmarshal embedded resources (represented as interface{})
package models
import (
	"encoding/json"
	"errors"
	"fmt"
)
type Questionnaire struct {
	DomainResource `bson:",inline"`
	Url            string                       `bson:"url,omitempty" json:"url,omitempty"`
	Identifier     []Identifier                 `bson:"identifier,omitempty" json:"identifier,omitempty"`
	Version        string                       `bson:"version,omitempty" json:"version,omitempty"`
	Status         string                       `bson:"status,omitempty" json:"status,omitempty"`
	Date           *FHIRDateTime                `bson:"date,omitempty" json:"date,omitempty"`
	Publisher      string                       `bson:"publisher,omitempty" json:"publisher,omitempty"`
	Telecom        []ContactPoint               `bson:"telecom,omitempty" json:"telecom,omitempty"`
	UseContext     []CodeableConcept            `bson:"useContext,omitempty" json:"useContext,omitempty"`
	Title          string                       `bson:"title,omitempty" json:"title,omitempty"`
	Concept        []Coding                     `bson:"concept,omitempty" json:"concept,omitempty"`
	SubjectType    []string                     `bson:"subjectType,omitempty" json:"subjectType,omitempty"`
	Item           []QuestionnaireItemComponent `bson:"item,omitempty" json:"item,omitempty"`
}
func (resource *Questionnaire) MarshalJSON() ([]byte, error) {
	resource.ResourceType = "Questionnaire"
	return json.Marshal(*resource)
}
func (x *Questionnaire) GetBSON() (interface{}, error) {
	x.ResourceType = "Questionnaire"
	return *x, nil
}
type questionnaire Questionnaire