internal static DirectoryObject DeserializeDirectoryObject(JsonElement element) { if (element.TryGetProperty("objectType", out JsonElement discriminator)) { switch (discriminator.GetString()) { case "Application": return(Application.DeserializeApplication(element)); case "Group": return(ADGroup.DeserializeADGroup(element)); case "ServicePrincipal": return(ServicePrincipal.DeserializeServicePrincipal(element)); case "User": return(User.DeserializeUser(element)); } } string objectId = default; string objectType = default; DateTimeOffset?deletionTimestamp = default; IReadOnlyDictionary <string, object> additionalProperties = default; Dictionary <string, object> additionalPropertiesDictionary = default; foreach (var property in element.EnumerateObject()) { if (property.NameEquals("objectId")) { if (property.Value.ValueKind == JsonValueKind.Null) { continue; } objectId = property.Value.GetString(); continue; } if (property.NameEquals("objectType")) { if (property.Value.ValueKind == JsonValueKind.Null) { continue; } objectType = property.Value.GetString(); continue; } if (property.NameEquals("deletionTimestamp")) { if (property.Value.ValueKind == JsonValueKind.Null) { continue; } deletionTimestamp = property.Value.GetDateTimeOffset("O"); continue; } additionalPropertiesDictionary ??= new Dictionary <string, object>(); if (property.Value.ValueKind == JsonValueKind.Null) { additionalPropertiesDictionary.Add(property.Name, null); } else { additionalPropertiesDictionary.Add(property.Name, property.Value.GetObject()); } } additionalProperties = additionalPropertiesDictionary; return(new DirectoryObject(objectId, objectType, deletionTimestamp, additionalProperties)); }