尝试用c#将JSON字符串转换为对象。使用一个非常简单的测试用例:
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
object routes_list = json_serializer.DeserializeObject("{ \"test\":\"some data\" }");
问题是routes_list从未被设置;它是一个未定义的对象。什么好主意吗?
尝试用c#将JSON字符串转换为对象。使用一个非常简单的测试用例:
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
object routes_list = json_serializer.DeserializeObject("{ \"test\":\"some data\" }");
问题是routes_list从未被设置;它是一个未定义的对象。什么好主意吗?
当前回答
使用Newtonsoft,您可以轻松完成您的要求。Json库。我正在写下下面的一个例子,看看它。
为您接收的对象类型初始化:
public class User
{
public int ID { get; set; }
public string Name { get; set; }
}
代码:
static void Main(string[] args)
{
string json = "{\"ID\": 1, \"Name\": \"Abdullah\"}";
User user = JsonConvert.DeserializeObject<User>(json);
Console.ReadKey();
}
这是解析json的一种非常简单的方法。
其他回答
使用Newtonsoft,您可以轻松完成您的要求。Json库。我正在写下下面的一个例子,看看它。
为您接收的对象类型初始化:
public class User
{
public int ID { get; set; }
public string Name { get; set; }
}
代码:
static void Main(string[] args)
{
string json = "{\"ID\": 1, \"Name\": \"Abdullah\"}";
User user = JsonConvert.DeserializeObject<User>(json);
Console.ReadKey();
}
这是解析json的一种非常简单的方法。
正如tripletdad99所说
var result = JsonConvert.DeserializeObject<T>(json);
但如果你不想创建一个额外的对象,你可以用Dictionary来代替
var result = JsonConvert.DeserializeObject<Dictionary<string, string>>(json_serializer);
看起来您正在尝试反序列化到原始对象。您可以创建一个Class来表示要转换的对象。这在处理较大对象或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
您可能不想仅仅将routes_list声明为对象类型。它没有。test属性,所以你不会得到一个很好的对象。在这里,您最好定义一个类或结构,或者使用dynamic关键字。
如果您真的希望这段代码像您所拥有的那样工作,您需要知道DeserializeObject返回的对象是string,object的泛型字典。下面是这样做的代码:
var json_serializer = new JavaScriptSerializer();
var routes_list = (IDictionary<string, object>)json_serializer.DeserializeObject("{ \"test\":\"some data\" }");
Console.WriteLine(routes_list["test"]);
如果你想使用dynamic关键字,你可以在这里阅读如何使用。
如果你声明一个类或结构,你可以调用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);
}
}
添加这个ddl来引用您的项目:System.Web.Extensions.dll
使用System.Web.Script.Serialization;
public class IdName
{
public int Id { get; set; }
public string Name { get; set; }
}
string jsonStringSingle = "{'Id': 1, 'Name':'Thulasi Ram.S'}".Replace("'", "\"");
var entity = new JavaScriptSerializer().Deserialize<IdName>(jsonStringSingle);
string jsonStringCollection = "[{'Id': 2, 'Name':'Thulasi Ram.S'},{'Id': 2, 'Name':'Raja Ram.S'},{'Id': 3, 'Name':'Ram.S'}]".Replace("'", "\"");
var collection = new JavaScriptSerializer().Deserialize<IEnumerable<IdName>>(jsonStringCollection);