public PersonSetOnceEvent CreatePersonSetOnceEvent()
        {
            this.AssertValidProjectToken();
            var personEvent = new PersonSetOnceEvent();

            this.OnCreatePersonEvent(personEvent);
            return(personEvent);
        }
        public PersonSetOnceEvent CreatePersonSetOnceEvent(String distinctId)
        {
            this.AssertValidProjectToken();
            var personEvent = new PersonSetOnceEvent();

            personEvent.DistinctUserId = distinctId;
            this.OnCreatePersonEvent(personEvent);
            return(personEvent);
        }
        protected virtual void WriteSetOnceJson(JsonWriter writer, PersonSetOnceEvent personEvent)
        {
            // https://mixpanel.com/docs/people-analytics/people-http-specification-insert-data
            //{
            //    "$set_once": {
            //          "initial referrer": "Dr. So and So"
            //    },
            //    "$token": "36ada5b10da39a1347559321baf13063",
            //    "$distinct_id": "13793"
            //}

            writer.WriteStartObject();
            writer.WritePropertyName("$set_once");
            writer.WriteRawValue(personEvent.Properties.ToPropertyArrayJson(Formatting.None) ?? "{}");
            this.WriteCommonPersonValues(writer, personEvent);
            writer.WriteEnd();
        }
 protected virtual void OnCreatePersonEvent(PersonSetOnceEvent personEvent)
 {
     personEvent.ProjectToken = this.ProjectToken;
 }