using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization.Formatters;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using System.Collections.ObjectModel;
using System.Text.Json.Serialization;
public Repository(string gitDirectory) => this.GitDirectory = new DirectoryInfo(gitDirectory);
[JsonConverter(typeof(DirectoryInfoConverter))]
public DirectoryInfo GitDirectory { get; }
public class DirectoryInfoConverter : JsonConverter<DirectoryInfo>
public override DirectoryInfo Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) =>
new DirectoryInfo(reader.GetString());
public override void Write(Utf8JsonWriter writer, DirectoryInfo value, JsonSerializerOptions options) =>
writer.WriteStringValue(value.ToString());
public abstract class GitObject
public Repository Repository { get; set; }
public abstract string Serialize();
public abstract void Deserialize(string data);
public class Blob : GitObject
public string Data { get; set; }
public Blob(Repository repository, string data = null)
if (data != null) Data = File.ReadAllText(data);
public override string Serialize()
return JsonSerializer.Serialize(this);
public override void Deserialize(string data)
Blob blobData = JsonSerializer.Deserialize<Blob>(data);
public static void Test()
var codeFileName = "Question72000907-code.txt";
File.WriteAllText(codeFileName, GetCode());
var repository = new Repository(Directory.GetCurrentDirectory());
FileInfo file = new FileInfo(Path.Combine(repository.GitDirectory.FullName, codeFileName));
GitObject.Blob firstBlob = new GitObject.Blob(repository, file.FullName);
var json = firstBlob.Serialize();
GitObject.Blob secondBlob = new GitObject.Blob(repository);
secondBlob.Deserialize(json);
File.Delete(codeFileName);
static string GetCode() => @"namespace HelloWorld
static void Main(string[] args)
System.Console.WriteLine(""Hello World!"");
public static void Main()
Console.WriteLine("Environment version: {0} ({1}), {2}", System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription , Environment.Version, Environment.OSVersion);
Console.WriteLine("System.Text.Json version: " + typeof(JsonSerializer).Assembly.FullName);
Console.WriteLine("Failed with unhandled exception: ");