2015-09-05 145 views
1

我只是无法获取json中嵌入对象的键和值。 我想获得这些密钥和值,如{ user: 'admin', msg: 'exit' }。 使用此代码我得到item.Key(即该json中的id)和item.Value(System.Collections.Generic.Dictionary`2 [System.String,System.Object]) 但我只是不知道什么与这个对象有关。如何从中获取数据? 我从服务器得到json -使用.NET Framework 3.5解析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" 
    } 
} 

谢谢你的回答。

P.S. 我不想使用任何外部库。

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(); 
     } 
    } 
} 
+0

这是无效的json – Plutonix

+0

已修复,但仍不知道如何处理item.Value对象 – SLI

回答

1

您正在反序列化为Object哪些不会公开值属性。 JSON代表serializied对象,所以最好是反序列化到相同类型:

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

要使用它作为价值目标类型:

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
Value:admin,exit
Key:366
Value:user,enter
(等)

VS将帮助建立类:把有效的json放在剪贴板上;然后
编辑菜单 - >选择性粘贴 - >将Json粘贴为类

你可能需要调整一些东西。我认为这是VS2010添加了这个功能的地方。