尝试将JSON字符串转换为C#中的对象。使用一个非常简单的测试用例:
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
object routes_list = json_serializer.DeserializeObject("{ \"test\":\"some data\" }");
问题是routes_list永远不会被设置;它是一个未定义的对象。有什么想法吗?
发布于 2011-01-06 09:53:02
看起来您正试图反序列化为一个原始对象。您可以创建一个表示要转换到的对象的类。这在处理较大的对象或JSON字符串的情况下最有用。
例如:
class Test {
String test;
String getTest() { return test; }
void setTest(String test) { this.test = test; }
}
那么你的反序列化代码应该是:
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
Test routes_list =
(Test)json_serializer.DeserializeObject("{ \"test\":\"some data\" }");
有关更多信息,请参阅本教程:http://www.codeproject.com/Tips/79435/Deserialize-JSON-with-Csharp.aspx
发布于 2013-02-16 06:04:26
或者,您可以使用Newtownsoft.Json库,如下所示:
using Newtonsoft.Json;
...
var result = JsonConvert.DeserializeObject<T>(json);
其中T
是与您的JSON字符串匹配的对象类型。
发布于 2011-01-06 09:51:03
您可能不希望只将routes_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"]);
如果要使用动态关键字you can read how here。
如果你声明了一个类或结构,你可以调用反序列化而不是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);
}
}
https://stackoverflow.com/questions/4611031
复制相似问题