ADO.NET Entity Framework support accidently added to Json.NET
I sat down today resolved to finally add support for serializing ADO.NET Entities objects… and instead I came away surprised to find that it already worked. My initial “Lets prove it breaks first and then fix it” test passed first time and it wasn’t until I debugged through the test that I was convinced NUnit wasn’t the one that was broken.
My simple test Entities model of a file system:
 
 
And the JSON serialized with a couple of folders and files in it:
Folder rootFolder = CreateEntitiesTestData();
      string json = JsonConvert.SerializeObject(rootFolder, Formatting.Indented);
Console.WriteLine(json);
      //{
      //  "$id": "1",
      //  "FolderId": "a4e8ba80-eb24-4591-bb1c-62d3ad83701e",
      //  "Name": "Root folder",
      //  "Description": null,
      //  "CreatedDate": "\/Date(978087000000)\/",
      //  "Files": [],
      //  "ChildFolders": [
      //    {
      //      "$id": "2",
      //      "FolderId": "484936e2-7cbb-4592-93ff-b2103e5705e4",
      //      "Name": "Child folder",
      //      "Description": null,
      //      "CreatedDate": "\/Date(978087000000)\/",
      //      "Files": [
      //        {
      //          "$id": "3",
      //          "FileId": "cc76d734-49f1-4616-bb38-41514228ac6c",
      //          "Name": "File 1.txt",
      //          "Description": null,
      //          "CreatedDate": "\/Date(978087000000)\/",
      //          "Folder": {
      //            "$ref": "2"
      //          }
      //        }
      //      ],
      //      "ChildFolders": [],
      //      "ParentFolder": {
      //        "$ref": "1"
      //      }
      //    }
      //  ],
      //  "ParentFolder": null
      //}
    That looks pretty good!
Features added in Beta 4, reference tracking and support for the DataContract/DataMember attributes from WCF, means that instead of Json.NET exploding in a heap of timber (complete with lone wagon wheel spinning off into the distance) at the mere site of an ADO.NET Entities object, serializing now works out of the box!
I love it when things come together [:)]