C#使用JavaScriptSerializer.DeserializeObject反序列化JSON

时间:2017-08-28 06:35:01

标签: c# json serialization

我不是C#程序员,而是不时使用该语言。我想知道,如果我有一个JSON字符串,我想使用JavaScriptSerializer.DeserializeObject反序列化,我怎么能这样做。例如,如果我有一个JSON:

{
    "Name": "col_name2",
    "Value": [
        {
            "From": 100,
            "To": 200
        },
        {
            "From": 100,
            "To": 200
        }
    ]
}

我在名为sJson的变量中有JSON字符串:

using System.Web.Script.Serialization;
...

JavaScriptSerializer jss = new JavaScriptSerializer();
Object json = jss.DeserializeObject(sJson);

现在我该如何使用这个Object json变量?

注意:我已经知道如何使用System.Web.Script.Serialization.Deserialize<T>方法。

2 个答案:

答案 0 :(得分:3)

请看这篇关于戴维斯答案的文章:

Deserialize json object into dynamic object using Json.net

你可以将它放入动态(底层类型是JObject) 然后你可以访问这样的信息:

JavaScriptSerializer jss = new JavaScriptSerializer();
dynamic json = jss.DeserializeObject(sJson);
Console.WriteLine(json["Name"]); // use as Dictionary

我更希望创建一个数据传输对象(DTO)将您的JSON结构表示为c#类。

答案 1 :(得分:1)

您可以为此特定情况声明新的自定义类:

public class CustomClass
{
    public string Name { get; set; }
    public List<ValueClass> Value { get; set; }
}

public class ValueClass
{
    public int From { get; set; }
    public int To { get; set; }
}

然后直接反序列化到这些类(反序列化器将自动映射正确的属性):

JavaScriptSerializer jss = new JavaScriptSerializer();
CustomClass json = (CustomClass)jss.Deserialize(sJson, typeof(CustomClass));

此外,如果您有多个项目,这也很容易:

List<CustomClass> json = (List<CustomClass>)jss.Deserialize(sJson, typeof(List<CustomClass>));