解析JSON响应的最简单方式

32
有没有一种简单的方法在C#中解析下面的JSON?
{"type":"text","totalprice":"0.0045","totalgsm":"1","remaincredit":"44.92293","messages": [
{"status":"1","messageid":"234011120530636881","gsm":"923122699633"}
]}

如果出现多个结果,则:


4
使用类库如 Json.NET。 - Jehof
这是一种使用json.net解析嵌套json对象的方法:Parsing nested json objects with json.net - Suprabhat Biswal
在使用Json.NET时,这个链接可能会对你有所帮助。 - croxy
您可以参考此链接,这是类似的问题:https://dev59.com/uGw15IYBdhLWcg3wbbJx - Ravi Kanth
可能是如何使用C#解析JSON?的重复问题。 - Liam
4个回答

61

请按照以下步骤操作:

  1. 使用json2csharp.com将您的JSON转换为C#;
  2. 创建一个类文件,并将上述生成的代码放入其中;
  3. 使用Nuget Package Manager添加Newtonsoft.Json库到您的项目中;
  4. 使用以下代码将从您的服务接收到的JSON进行转换:

     RootObject r = JsonConvert.DeserializeObject<RootObject>(json);
    

    (请随意将RootObject重命名为您觉得更有意义的名称。其他类应保持不变。)


25

您可以安全地使用内置的 JavaScriptSerializer,无需引用其他第三方库:

var ser = new System.Web.Script.Serialization.JavaScriptSerializer();
ser.DeserializeObject(json);

3
对我很有帮助。DeserializeObject返回了一个类型为Dictionary<string,object>的对象。字典中的对象可以是字符串、对象数组或更多的Dictionary<string,object>对象。 - John Gilmer
4
如果你只是进行简单的解析,或者不想使用第三方库,那么我认为这是最好的方法。 - YYamil

7
我发现一种不使用任何外部 API 的方法来获取它。
        using (var w = new WebClient())
        {
            var json_data = string.Empty;
            string url = "YOUR URL";
            // attempt to download JSON data as a string
            try
            {
                json_data = w.DownloadString(url);
                JavaScriptSerializer jsSerializer = new JavaScriptSerializer();
                var result = jsSerializer.DeserializeObject(json_data);
                Dictionary<string, object> obj2 = new Dictionary<string, object>();
                obj2=(Dictionary<string,object>)(result);

                string val=obj2["KEYNAME"].ToString();
            }
            catch (Exception) { }
            // if string with JSON data is not empty, deserialize it to class and return its instance 
        }

1
对我来说,最简单的方法是使用JSON.net进行反序列化,将其转换为表示对象的实体,例如:
public class Message
{
    public string status { get; set; }
    public string messageid { get; set; }
    public string gsm { get; set; }
}

public class YourRootEntity
{
    public string type { get; set; }
    public string totalprice { get; set; }
    public string totalgsm { get; set; }
    public string remaincredit { get; set; }
    public List<Message> messages { get; set; }
}

并执行这个操作:
YourRootEntity data JsonConvert.DeserializeObject<YourRootEntity>(jsonStrong);

这样做是行不通的。Message属性具有JSON对象,而不是对象数组。不需要public List<Message> messages { get; set; },简单地使用public Message messages { get; set; }即可。 - Suprabhat Biswal
我只是用json2csharp创建了它,以便编写一个示例。 - SergioZgz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接