如何在C#和ASP.NET中反序列化JSON值?

时间:2011-11-18 16:15:35

标签: c# asp.net json

我需要获取从网址获取的一些值。 JSON如下:

{"country":{"name":"India","State":"Raj": Count :239}, "Population": 25487}

现在我想使用C#获取Count和Population的值。

我尝试过使用JavaScriptSerializer();但问题是它的响应时间慢得多。

请建议我从这个JSON字符串中获取值的方法。

由于

5 个答案:

答案 0 :(得分:4)

我个人使用

https://github.com/ServiceStack/ServiceStack.Text

这是一个非常快速的JSON串行器/解串器。

我通常会创建一个扩展方法来使代码更整洁:

    public static string ToJson(this object _obj)
    {

        return JsonSerializer.SerializeToString(_obj);
    }

编辑:

获取这些值的快捷方法是创建一个数据类:

public class Country
{
    public string name { get; set; }
    public string State { get; set; }
    public int Count { get; set; }
}

public class CountryInformation
{
    public Country Country { get; set; }
    public int Population { get; set; }
}

然后,使用ServiceStack:

void SomeFunction(string _Json)
{
    var FeedResult = _Json.FromJson<CountryInformation>();
}

然后您可以从FeedResult获取值:

FeedResult.Country.name;

答案 1 :(得分:1)

一种选择是使用Json.NET - http://json.codeplex.com/

答案 2 :(得分:1)

我通常建议使用像@misterjingo建议的类型POCO。 但是,对于一次性任务,您可以使用ServiceStack's Json Serializer动态解析它,如:

var json = "{\"country\":{\"name\":\"India\",\"State\":\"Raj\": \"Count\": 239}, \"Population\": 25487}";

var jsonObj = JsonObject.Parse(json);
var country = jsonObj.Object("country");

Console.WriteLine("Country Name: {0}, State: {1}, Count: {2} | Population: {3}",
    country["name"], country["State"], country["Count"], jsonObj["Population"]);

//Outputs:
//Country Name: India, State: Raj, Count: 239 | Population: 25487

注意:JSON spec要求对象属性名称是一个始终被双引号的字符串。

ServiceStack的JsonSerializer也是.NET much faster than other Json Serializers中最快的Json Serializer。

答案 3 :(得分:0)

您还可以使用较新的DataContractJsonSerializer类来处理JSON数据。

答案 4 :(得分:0)

你可以使用DataContractSerialiser(理想情况下,如果你创建了feed),如果你有一个棘手的格式错误的json字符串,使用JSON.net,因为它让你linq2json一次解析一个节点。