using System.Text.Json.Serialization;
using System.Runtime.Serialization;
using Microsoft.Graph.Models;
public static void Main()
string jsonBody = "{\"@odata.context\":\"https://graph.microsoft.com/beta/$metadata#storage/fileStorage/containers/$entity\",\"id\":\"b!fps-U2VzgE6tdhL6KhCbuEe-T6XzQzpMgYsre31bUEILZCJczRCMToFj_OAJiN59\",\"displayName\":\"2024-0006\",\"description\":\"Blabla\",\"containerTypeId\":\"cfd0ac12-41e7-4832-b071-6bfa7f920eb3\",\"status\":\"inactive\",\"createdDateTime\":\"2024-08-31T19:20:56.39Z\",\"itemMajorVersionLimit\":500,\"isItemVersioningEnabled\":true,\"ownershipType\":\"tenantOwned\",\"lockState\":\"unlocked\",\"settings\":{}}";
Console.WriteLine(jsonBody);
var options = new JsonSerializerOptions
PropertyNameCaseInsensitive = true,
Converters = { new EnumMemberJsonConverter<FileStorageContainerStatus>() }
var container = JsonSerializer.Deserialize<FileStorageContainer>(jsonBody, options);
Console.WriteLine("System.Text.Json ContainerId:" + container.Id);
var newtonContainer = Newtonsoft.Json.JsonConvert.DeserializeObject<FileStorageContainer>(jsonBody);
Console.WriteLine("NewtonSoft ContainerId:" + newtonContainer.Id);
public class EnumMemberJsonConverter<T> : JsonConverter<T> where T : struct, Enum
public override T Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
if (reader.TokenType != JsonTokenType.String)
throw new JsonException();
string enumString = reader.GetString();
foreach (var field in typeof(T).GetFields(BindingFlags.Static | BindingFlags.Public))
if (field.GetCustomAttribute<EnumMemberAttribute>()?.Value == enumString)
return (T)field.GetValue(null);
if (Enum.TryParse(enumString, true, out T parsedEnum))
throw new JsonException($"Unable to convert \"{enumString}\" to enum \"{typeof(T)}\".");
public override void Write(Utf8JsonWriter writer, T value, JsonSerializerOptions options)
var enumMember = value.GetType()
.GetField(value.ToString())
.GetCustomAttribute<EnumMemberAttribute>();
string enumString = enumMember?.Value ?? value.ToString();
writer.WriteStringValue(enumString);