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);
}
}
参考地址:http://bbs.csdn.net/topics/390545176