Repository: microsoftgraph/msgraph-sdk-java-core
Issue: Serialization of TimeOfDay in update mailboxSettings.workingHours.startTime

Greetings! I tried to update the user `mailboxSetting.workingHours.startTime` but ended up with an error. See also https://github.com/microsoftgraph/msgraph-sdk-java/issues/168#issuecomment-852027168.

Code:
```
GraphServiceClient<Request> client = connector.getGraphClient();
        MailboxSettings mailboxSettings = new MailboxSettings();
        mailboxSettings.workingHours = new WorkingHours();
        mailboxSettings.workingHours.startTime = TimeOfDay.parse("08:30:00");

        client.customRequest("/users/6947272f-1908-49d2-b610-55418494e15f/mailboxSettings", MailboxSettings.class)
                .buildRequest()
                .patch(mailboxSettings);
```

### Expected behavior

The update should be working as the mailboxSettings in general can be updated (other fields update successful).
See also: https://docs.microsoft.com/en-us/graph/api/resources/workinghours?view=graph-rest-1.0

### Actual behavior

Error occurs:

```
Exception in thread "main" com.microsoft.graph.http.GraphServiceException: Error code: RequestBodyRead
Error message: An unexpected 'StartObject' node was found for property named 'startTime' when reading from the JSON reader. A 'PrimitiveValue' node was expected.

PATCH https://graph.microsoft.com/v1.0/users/6947272f-1908-49d2-b610-55418494e15f/mailboxSettings
SdkVersion : graph-java/v3.5.0
[...]

400 : Bad Request
[...]

[Some information was truncated for brevity, enable debug logging for more details]
	at com.microsoft.graph.http.GraphServiceException.createFromResponse(GraphServiceException.java:419)
	at com.microsoft.graph.http.GraphServiceException.createFromResponse(GraphServiceException.java:378)
	at com.microsoft.graph.http.CoreHttpProvider.handleErrorResponse(CoreHttpProvider.java:503)
	at com.microsoft.graph.http.CoreHttpProvider.processResponse(CoreHttpProvider.java:432)
	at com.microsoft.graph.http.CoreHttpProvider.sendRequestInternal(CoreHttpProvider.java:398)
	at com.microsoft.graph.http.CoreHttpProvider.send(CoreHttpProvider.java:220)
	at com.microsoft.graph.http.CoreHttpProvider.send(CoreHttpProvider.java:197)
	at com.microsoft.graph.http.BaseRequest.send(BaseRequest.java:332)
	at com.microsoft.graph.http.CustomRequest.patch(CustomRequest.java:129)
...
```

### Steps to reproduce the behavior

Sdk version: 3.5
Java version: 8

Call above code on ms dev program tenant with an existing user that has assigned a license.

### Additional information

The issue seems to be connected to https://github.com/microsoftgraph/msgraph-sdk-java/issues/168. The TimeOfDay serializer is probably still missing in GsonFactory. The sdk is probably serializing the TimeOfDay as json object instead of string. 
[AB#9658](https://microsoftgraph.visualstudio.com/0985d294-5762-4bc2-a565-161ef349ca3e/_workitems/edit/9658)

Changed files:
src/test/java/com/microsoft/graph/serializer/TimeOfDayTests.java, src/main/java/com/microsoft/graph/serializer/GsonFactory.java

diff --git a/src/main/java/com/microsoft/graph/serializer/GsonFactory.java b/src/main/java/com/microsoft/graph/serializer/GsonFactory.java
index d4da626..4a040cc 100644
--- a/src/main/java/com/microsoft/graph/serializer/GsonFactory.java
+++ b/src/main/java/com/microsoft/graph/serializer/GsonFactory.java
@@ -256,6 +256,15 @@ final class GsonFactory {
             }
         };
 
+        final JsonSerializer<TimeOfDay> timeOfDayJsonSerializer = new JsonSerializer<TimeOfDay>() {
+            @Override
+            public JsonElement serialize(final TimeOfDay src,
+                                         final Type typeOfSrc,
+                                         final JsonSerializationContext context) {
+                return new JsonPrimitive(src.toString());
+            }
+        };
+
         final JsonDeserializer<Boolean> booleanJsonDeserializer = new JsonDeserializer<Boolean>() {
             @Override
             public Boolean deserialize(final JsonElement json,
@@ -344,6 +353,7 @@ final class GsonFactory {
                 .registerTypeHierarchyAdapter(BaseCollectionPage.class, collectionPageDeserializer)
                 .registerTypeHierarchyAdapter(BaseCollectionResponse.class, collectionResponseDeserializer)
                 .registerTypeAdapter(TimeOfDay.class, timeOfDayJsonDeserializer)
+                .registerTypeAdapter(TimeOfDay.class, timeOfDayJsonSerializer)
                 .registerTypeAdapterFactory(new FallbackTypeAdapterFactory(logger))
                 .create();
     }
diff --git a/src/test/java/com/microsoft/graph/serializer/TimeOfDayTests.java b/src/test/java/com/microsoft/graph/serializer/TimeOfDayTests.java
index 8a3f623..288c295 100644
--- a/src/test/java/com/microsoft/graph/serializer/TimeOfDayTests.java
+++ b/src/test/java/com/microsoft/graph/serializer/TimeOfDayTests.java
@@ -1,10 +1,12 @@
 package com.microsoft.graph.serializer;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.mockito.Mockito.mock;
 
 import org.junit.jupiter.api.Test;
 
 import com.microsoft.graph.core.TimeOfDay;
+import com.microsoft.graph.logger.ILogger;
 
 public class TimeOfDayTests {
 
@@ -43,5 +45,11 @@ public class TimeOfDayTests {
         assertEquals(30, time.getMinute());
         assertEquals(44, time.getSecond());
     }
-
+    @Test
+    public void testTimeOfDaySerialization() throws Exception {
+        final TimeOfDay time = new TimeOfDay(12, 30, 44);
+        final ILogger logger = mock(ILogger.class);
+        final ISerializer serializer = new DefaultSerializer(logger);
+        assertEquals("\\"12:30:44\\"", serializer.serializeObject(time));
+    }
 }