Loop through a JObject and replace property value

Hi I have a following JObject

{
  "$id": "1",
  "CustomerApplication": {
    "contractDate": {
      "$id": "2",
      "$type": "Customer.DateTimeObjectDbNullConverter, Customer.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=f291d57f62344",
      "IsDBNull": false,
      "Date": "2020-07-05T00:00:00"
    },
    "lastTouchedDate": {
      "$id": "4",
      "$type": "Customer.DateTimeObjectDbNullConverter, Customer.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=f291d57f62344",
      "IsDBNull": true,
      "Date": null
    },
    "totalIncome": 110000,
    "createdByID": 0,
    "createdDate": {
      "$id": "5",
      "$type": "Customer.DateTimeObjectDbNullConverter, Customer.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=f291d57f62344",
      "IsDBNull": false,
      "Date": "2020-08-04T12:26:28.22"
    },
    "modifiedByID": 37683,
    "modifiedDate": {
      "$id": "6",
      "$type": "Customer.DateTimeObjectDbNullConverter, Customer.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=f291d57f62344",
      "IsDBNull": false,
      "Date": "2020-08-04T12:35:52.433"
    }
  },
  "Customers": {
    "$values": [
      {
        "custLicense": "555555",
        "custLicenseState": "TX",
        "dateOfBirth": {
          "$id": "11",
          "$type": "Customer.DateTimeObjectDbNullConverter, Customer.Common.V4, Version=9.0.0.0, Culture=neutral, PublicKeyToken=f291d57f62344",
          "IsDBNull": false,
          "Date": "1980-08-03T00:00:00"
        },
        "includeDebt": true,
        "customerNumber": "1234567",
        "phone": "1234578",
        "pager": "",
        "mobilePhone": " ",
        "memo": "",
        "residences": {
          "$id": "12",
          "$type": "Customer.Residence[], Customer.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=f291d57f62344",
          "$values": [
            {
              "$id": "13",
              "$type": "Customer.Residence, Customer.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=f291d57f62344",
              "residenceID": 265906636,
              "applicantID": 142874336,
              "applicationID": 110315632,
              "residentialStatusID": 0,
              "modifiedByID": 0,
              "modifiedDate": {
                "$id": "14",
                "$type": "Customer.DateTimeObjectDbNullConverter, Customer.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=f291d57f62344",
                "IsDBNull": false,
                "Date": "2020-08-04T12:26:36.953"
              }
            }
          ]
        }
      }
    ]
  }
}

In my above json body, I have nested objects as shown in example below:

"contractDate": {
      "$id": "2",
      "$type": "Customer.DateTimeObjectDbNullConverter, Customer.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=f291d57f62344",
      "IsDBNull": false,
      "Date": "2020-07-05T00:00:00"
    },

So what I would like is to identify all properties which have type as follows

"$type": "Customer.DateTimeObjectDbNullConverter, Customer.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=f291d57f62344",

and flatten them to the "Date" property value of that object like this:

 "contractDate" :"2020-07-05T00:00:00" 

I want to do this for all such properties at various nested levels of my Json object. How can I achieve them..