static void Main(string[] args) { #region Class Approach BookClass b1 = new BookClass("Test Book", "Bob"); BookClass b2 = new BookClass("Test Book 2", "Bob"); var json = JsonSerializer.Serialize(b1); var equals = b1 == b2; Console.WriteLine($"is Equal?{equals}"); Console.WriteLine(json); var b3 = JsonSerializer.Deserialize <BookClass>(json); var secondEquals = b3 == b1; Console.WriteLine($"is second Equal?{secondEquals}"); (string bookName, string authorName) = b1; #endregion #region Record Approach var b4 = new BookRecord("Test Book 3", "Bob"); var b5 = new BookRecord("Test Book 4", "Bob"); var json2 = JsonSerializer.Serialize(b4); Console.WriteLine(json2); var b6 = JsonSerializer.Deserialize <BookRecord>(json2); var seprateRecordEquality = b4 == b5; //False var recordEquality = b4 == b6; //True var b7 = b4; b4.AuthorName = "Peter"; var sameRecordChangeCheck = b7 == b4; //True b4 = b4 with { AuthorName = "Peter" }; //Record immutability ! A New Record is (string authorNameTuple, string bookNameTuple) = b4; // Test Book 3 , Peter var immutabilityEquality = b6 == b4; //False Console.WriteLine(b4.ToString()); // Test Book 3 , Peter #endregion } }