Проблема здесь в том, что строка json представляет собой массив человек (людей?!?), А не один Person
.
Измените десериализацию на
Person[] p = new JavaScriptSerializer().Deserialize<Person[]>(json);
и это сработает.
[Редактировать - в ответ на ваш комментарий]
Да, это даст три экземпляра Person, и фактически они будут иметь свойства null / zero.
Я подозреваю, что вы действительно ожидали, что эта строка json даст вам ваш оригинальный код:
string json = "[{\"FirstName\":\"John\", \"LastName\":\"Doe\",\"Id\":\"1001\"}]";
это единственный человек, Джон Доу, с идентификатором 1001. Но это не то, что говорит JSON, если десериализовать в Person
.
То, что вы изначально json можете быть десериализованным, представляет собой массив пар имя / значение, подобный этому:
public class NameValuePair
{
public string name;
public string value;
}
используя это
var p = new JavaScriptSerializer().Deserialize<NameValuePair[]>(json);
Надеюсь, этот фрагмент немного лучше иллюстрирует отношения между json и классом.