Those items with the dollar sign ($) are usually meant to be metadata and NOT fields. When JSON.NET serializes an object and you tell it to handle the object types, it will insert $ items that denotes metadata for correct deserialization later on.
If you want to treat the $ items as meta data, use JsonSerializerSettings. For example:
Dim jsonSettings As New Newtonsoft.Json.JsonSerializerSettings With {.TypeNameHandling = Newtonsoft.Json.TypeNameHandling.All}
Dim jsonOut As String = Newtonsoft.Json.JsonConvert.SerializeObject(objects, jsonSettings)
The TypeNameHandling = Newtonsoft.Json.TypeNameHandling.All tells JSON to handle the datatypes while relying on the $ for information.
Hope that helps..