【问题标题】:How to deserialize JSON values in C# and ASP.NET?如何在 C# 和 ASP.NET 中反序列化 JSON 值?
【发布时间】:2011-11-18 16:15:35
【问题描述】:

我需要获取一些从 Web URL 获得的值。 JSON是给定的:

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

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

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

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

谢谢

【问题讨论】:

    标签: c# asp.net json


    【解决方案1】:

    我个人使用

    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;

    【讨论】:

    • ServiceStack.Text 的最新版本还带有ToJson&lt;T&gt;()FromJson&lt;T&gt;() 扩展方法:)
    • 先生,如果我从 web url www.xyz.com 获取 JSON,请您为我编写 c# 代码.....并假设它给出了上面显示的 JSON。现在我如何使用 ServiceStack 获取值并将它们打印在标签中(比如说)......希望你能多写一些代码......谢谢
    • -1 问题从the problem is that its response time is much much slower.Please suggest me a way to fetch the values from this JSON string 更改为Sir can you please write c# code for me
    • 虽然我已经做到了,但先生,一些 JSON 值包含 [{json values}] 方括号,在这种情况下它会引发异常。那么如何处理呢?
    • @iKunu 如果它包含在[] 括号中,您将需要使用json.FromJson&lt;CountryInformation[]&gt;()
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我通常建议使用@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 上最快的 Json Serializer much faster than other Json Serializers

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-01-11
            • 2020-07-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-09
            相关资源
            最近更新 更多