2011-11-18 68 views
4

我需要获取从网址获得的一些值。 的JSON作为给定:如何反序列化C#和ASP.NET中的JSON值?

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

现在我想读取计数与人口使用C#的值。

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

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

感谢

回答

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;

+0

+1非常好,简单的扩展方法。 – Yuck

+0

最近版本的ServiceStack.Text自带'ToJson ()'和'FromJson ()'扩展方法:) – mythz

+0

如果我从网址www.xyz获取JSON,请问我可以为我编写c#代码。 COM .....并假设它给出了上面显示的JSON。现在我怎样才能得到使用ServiceStack的值,并打印它们在一个标签(说)...希望你会更多一点的代码....谢谢 – ItsLockedOut

0

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

1

我通常建议使用键入的POCO,如@misterjingo建议。 然而,对于一次性的任务,你可以使用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也是最快的Json串行器,用于.NET much faster than other Json Serializers

+0

我不知道这一点,感谢分享! –