C#里面对json的处理有2种,JavaScriptSerializer和DataContractJsonSerializer。
JavaScriptSerializer读出来就是key-value pair这种Dictionary<string, object>的东西,这个比较通用。
DataContractJsonSerializer类似于其他的Serializer,比如XMLSerializer一类的,是对象序列化/反序列化用的
第一种示例代码:
(测试发现using System.Web.Script.Serialization不能在Winform 中引用,所以JavaScriptSerializer 不用在winform中使用
那winform 下怎么解析JSON 可以参考:http://q.cnblogs.com/q/46365/ 1.Json.NET 2. 引用官方的System.Web.Extensions.dll
dll文件:可以网上下载,或者参考下面地址的方面:http://wenku.it168.com/d_000825166.shtml):
string jsonStr = @"{""fruits"":{""a"":""orange"",""b"":""banana"",""c"":""apple""},""name"":{""z"":""zhangsan"",""l"":""lisi""}}"; JavaScriptSerializer serializer = new JavaScriptSerializer(); Dictionary<string, object> json = serializer.DeserializeObject(jsonStr) as Dictionary<string, object>; Dictionary<string, object> obj = json["fruits"] as Dictionary<string, object>; Console.WriteLine(obj["a"]); Console.ReadLine();第二种:DataContractJsonSerializer很不错,(不过,要申明DataContract数据数据契约,如果参数的名字不是固定的话,用第一种更好)
[DataContract] public class DanTengObj { [DataMember(Order = 1, Name = "fruits")] public Fruits fruits { get; set; } [DataMember(Order = 2, Name = "name")] public Name name { get; set; } [DataContract] public class Fruits { [DataMember(Order = 1, Name = "a")] public string a { get; set; } [DataMember(Order = 2, Name = "b")] public string b { get; set; } [DataMember(Order = 3, Name = "c")] public string c { get; set; } } [DataContract] public class Name { [DataMember(Order = 1, Name = "z")] public string z { get; set; } [DataMember(Order = 1, Name = "l")] public string l { get; set; } } } static void DanTengJsonTest() { string jsonStr = @"{""fruits"":{""a"":""orange"",""b"":""banana"",""c"":""apple""},""name"":{""z"":""zhangsan"",""l"":""lisi""}}"; DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(DanTengObj)); using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonStr))) { DanTengObj obj = js.ReadObject(ms) as DanTengObj; Console.WriteLine(obj.fruits.a); } }
浙公网安备 33010602011771号