Вы, вероятно, не хотите просто объявлять rout_list как object
тип. У него нет свойства .test, так что вы действительно не получите хороший объект обратно. Это одно из тех мест, где вам лучше определить класс или структуру, либо использовать ключевое слово dynamic.
Если вы действительно хотите, чтобы этот код работал так, как он есть у вас, вам нужно знать, что объект, возвращаемый DeserializeObject, представляет собой общий словарь строк, объектов. Вот код, чтобы сделать это таким образом:
var json_serializer = new JavaScriptSerializer();
var routes_list = (IDictionary<string, object>)json_serializer.DeserializeObject("{ \"test\":\"some data\" }");
Console.WriteLine(routes_list["test"]);
Если вы хотите использовать динамическое ключевое слово, вы можете прочитать, как здесь .
Если вы объявляете класс или структуру, вы можете вызвать Deserialize вместо DeserializeObject следующим образом:
class MyProgram {
struct MyObj {
public string test { get; set; }
}
static void Main(string[] args) {
var json_serializer = new JavaScriptSerializer();
MyObj routes_list = json_serializer.Deserialize<MyObj>("{ \"test\":\"some data\" }");
Console.WriteLine(routes_list.test);
Console.WriteLine("Done...");
Console.ReadKey(true);
}
}
JavaScriptSerializer
версию более MS, поскольку она не будет принимать ничего другого, кроме пользовательского форматирования JSON в WCF (например, поля даты, которые выглядят как даты, но не окружены в DATE (), терпят неудачу)