Composing the POST Http request to Add a Google Calendar API v3 Event
===

I'm trying to add an event to Google Calendar from within a test console app.
I have a token_refresh obtained for the scope "https://www.googleapis.com/auth/calendar" via a web application that I registered at the Google API Console.
I use this stored token_refresh in my test console app to get an access_token.
Then I want to add an event to the calendar of the user that corresponds to the refresh_token that I have.

So I build a POST HttpWebRequest as follows:

    HttpWebRequest request = WebRequest.Create("https://www.googleapis.com/calendar/v3/calendars/" + calendarID + "/events") as HttpWebRequest; // Where calendarID is like joe@gmail.com
    request.Headers.Add("Authorization", "Bearer " + access_token);
    request.Headers.Add("Accept-Charset", "UTF-8");
    request.Headers.Add("ContentType", "application/json");
    request.ProtocolVersion = HttpVersion.Version11;
    request.KeepAlive = false;
    request.Method = "POST"; 
    
    GoogleCalendarEvent anEvent = new GoogleCalendarEvent();
    anEvent.start = new GoogleCalendarEventTime(DateTime.Today);
    anEvent.end = new GoogleCalendarEventTime(DateTime.Today);            
            
    string data = jsonSerializer.Serialize(anEvent); // jsonSerializer is a JavaScriptSerializer object
    byte[] postData = Encoding.UTF8.GetBytes(data);
    Stream ws = request.GetRequestStream();
    ws.Write(postData, 0, postData.Length);
    ws.Close();
    WebResponse response = request.GetResponse(); // throws WebException The remote server returned an error: (400) Bad Request.
    stream = new StreamReader(response.GetResponseStream());
    string result = stream.ReadToEnd().Trim();

And the helper classes are:

    private class GoogleCalendar
    {
        private string kind;
        private string etag;
        private string id;
        private string summary;
        private string timezone;
        private string accesrole;

        public string Kind 
        { 
          get {  return this.kind;}
          set { this.kind = value; }
        }
            
        public string Etag 
        {
           get { return this.etag; }
           set { this.etag = value; }             
        }
            
        public string ID 
        {
           get { return this.id; }
           set { this.id = value; } 
        }

        public string Summary 
        {
           get { return this.summary; }
           set { this.summary = value; }
        }
            
        public string TimeZone 
        {
           get { return this.timezone; }
           set { this.timezone = value; }
        }
            
        public string AccessRole 
        {
           get { return this.accesrole; }
           set { this.accesrole = value; } 
        }
    }
    
    private class GoogleCalendarEventTime
    {
        private DateTime _date;

        public string date
        {
            get
            {
                return this._date.ToString("yyyy-mm-dd");
            }
        }

         public GoogleCalendarEventTime(DateTime time)
         {
             this._date = time;
         }
    }

My problem is that when the I try to get a response for the request I get an Error 400 Bad request. This type of error code is for both when a POST is badly constructed and as a placeholder for unknown errors.