使用.NET Framework 3.5解析JSON.不能从对象中获取数据

本文关键字:对象 获取 数据 不能 JSON Framework NET 解析 使用 | 更新日期: 2023-09-27 18:11:31

我只是无法获得json中嵌入对象的键和值。我想要得到这些键和值,比如{ user: 'admin', msg: 'exit' }。用这个代码我得到item。Key(即json中的id)和item。system . string,值(System.Collections.Generic.Dictionary 2 [System.Object])但我不知道该怎么处理这个东西。如何从中获取数据?我从服务器得到json -

{
    "365": {
        "user": "admin",
        "msg": "exit"
    },
    "366": {
        "user": "user",
        "msg": "enter"
    },
    "370": {
        "user": "user",
        "msg": "exit"
    },
    "372": {
        "user": "user",
        "msg": "exit"
    },
    "373": {
        "user": "admin",
        "msg": "exit"
    }
}

谢谢你的回答。

注:我不想使用任何外部库。

using System;
using System.Collections;
using System.Collections.Generic;
using System.Net;
using System.Web.Script.Serialization;
namespace JSONTestconsole
{
    class Program
    {
        static void Main(string[] args)
        {
            WebClient wc = new WebClient();
            wc.Proxy = null;
            string data = wc.DownloadString("http://temp.net");
            JavaScriptSerializer ser = new JavaScriptSerializer();
            var obj = ser.DeserializeObject(data) as ICollection;
            foreach (KeyValuePair<string, object> item in obj)
            {
                var id = item.Key;
                Console.WriteLine(id);
                Console.WriteLine(item.Value);
            }
            Console.ReadLine();
        }
    }
}

使用.NET Framework 3.5解析JSON.不能从对象中获取数据

您正在反序列化到不会暴露值属性的Object。json表示一个序列化的对象,所以最好反序列化为相同的Type:

public class UserMsg
{
    public string user { get; set; }
    public string msg { get; set; }
}

使用它作为Value目标类型:

string jstr = ...from whereever
JavaScriptSerializer jss = new JavaScriptSerializer();
Dictionary<string, UserMsg> myCol = jss.Deserialize<Dictionary<string, UserMsg>>(jstr);
// test result:
foreach (KeyValuePair<string, UserMsg> kvp in myCol)
{
    Console.WriteLine("Key: {0}", kvp.Key);
    Console.WriteLine("  Value: {0}, {1}", kvp.Value.user, kvp.Value.msg);
}
输出:


键:365取值范围:admin, exit
关键:366
取值:user,输入
(等)

VS将帮助创建类:将有效的json放在剪贴板上;然后
编辑菜单->粘贴特殊->将Json粘贴为类

你可能需要调整一些东西。我想应该是VS2010添加了这个特性。