Q:

How to remove or ignore Java type hints when deserializing JSON? 

I'm building a C# application that needs to consume JSON from a third-party web service.  It appears that the third party is using Java to produce the JSON, as there is Java type information (for example, "com.company. RegistrationDetail" below) in the returned strings.  To be specific, complex objects start with an "@type" property:
...
"registration": {
    "@type": "com.company. RegistrationDetail",
    "id": "regdw000000000003551",
    "displayName": "Registration 3551"
},
...

Clearly, this "@type" value is no use to me in C#.  Since it is just a property, though, it is easy enough to ignore.  Arrays are another matter:
...
"warnings": [
    "java.util. ArrayList",
    [
        "Warning #1",
        "Warning #2"
    ]
],
...

The "warnings" array is represented as a string that contains the type name, then a nested array with the actual warning items.  This interferes with my deserializer (JSON.NET), since the type of the items in "warnings" isn't consistent. 
I could just deserialize each chunk of the JSON as JObject or JArray, but this would be really tedious, as the web service's output is quite complex, with a number of levels of nested objects and arrays.  Ideally, I would like to be able to use something like json2csharp to generate C# classes from the JSON output, then deserialize everything at once like:
JsonConvert. DeserializeObject<GeneratedResponseClass>(jsonResponseData);

Is this a well-known encoding technique in Java (i.e. embedding type information into the JSON)?  Is there any way to strip out or ignore this Java type information when deserializing the JSON in C#? 
Here is a more complete sample (with a lot of superfluous properties and nested objects removed).  I would like to get the value of orderDetail -> orderItems[0] -> registration -> id.
{
    "@type":"com.company.learning.services.registration. OrderResult",
    "orderId":"intor000000000004090",
    "orderDetail":{
        "@type":"com.company.learning.services.registration. OrderDetail",
        "orderStatus":"Confirmed",
        "orderItems":[
            "list",
            [
                {
                    "@type":"com.company.learning.services.registration. OrderItemDetail",
                    "registration":{
                        "@type":"ServiceObjectReference",
                        "id":"regdw000000000003551",
                        "displayName":""
                    },
                    "quantity":null,
                    "itemStatusDescription":"Registered"
                }
            ]
        ],
        "orderContact":"Sample Person",
        "orderNumber":"00003911",
        "orderDate":{
            "@type":"com.company.customtypes. DateWithLocale",
            "date":1437425816000,
            "locale":"20-JUL-2015",
            "timeInUserTimeZone":"3:56 PM",
            "timeInCustomTimeZone":null,
            "dateInCustomTimeZone":null,
            "customTimeZoneDate":0,
            "timeInLocale":"4:56 PM",
            "dateInUserTimeZone":"20-JUL-2015"
        }
    }
}

A:

According to your final json, your model would be:
public class Registration
{
    public string id { get; set; }
    public string displayName { get; set; }
}

public class Order
{
    public Registration registration { get; set; }
    public object quantity { get; set; }
    public string itemStatusDescription { get; set; }
}

public class OrderDate
{
    public long date { get; set; }
    public string locale { get; set; }
    public string timeInUserTimeZone { get; set; }
    public object timeInCustomTimeZone { get; set; }
    public object dateInCustomTimeZone { get; set; }
    public int customTimeZoneDate { get; set; }
    public string timeInLocale { get; set; }
    public string dateInUserTimeZone { get; set; }
}

public class OrderDetail
{
    public string orderStatus { get; set; }
    public List<Order> orderItems { get; set; }
    public string orderContact { get; set; }
    public string orderNumber { get; set; }
    public OrderDate orderDate { get; set; }
}

public class RootObject
{
    public string orderId { get; set; }
    public OrderDetail orderDetail { get; set; }
}

This is the Converter class
public class JavaArrayConverter : JsonConverter
{
    Type _Type = null;
    public override bool CanConvert(Type objectType)
    {
        if(objectType. IsGenericType)
        {
            _Type = typeof(List<>).MakeGenericType(objectType. GetGenericArguments()[0]);
            return objectType == _Type;
        }
        return false;
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        var jArray = JArray. Load(reader);
        return jArray[1].ToObject(_Type); //jArray[0] is the "java-type"
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }
}

Now you can deserialize as:
var root = JsonConvert. DeserializeObject<RootObject>(DATA, new JavaArrayConverter());

