I know this is old, but for those searching for the answer I have a solution. Using Json.Net I cracked this nut by deserializing the structure as a dictionary with a string key and an object value. The solution is something like this:
public class Item {
public string Name { get; set; }
public string Address { get; set; }
}
Dictionary<string, Item> itemList =
JsonConvert.DeserializeObject<Dictionary<string, Item>>( myJsonString );
I verified the above code works on your example. You can probably use another type of collection supported by Json.Net if you cannot guarantee the item names (or keys in the resulting dictionary) are not unique.
public class ContactData { int id; string name; string address; }