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);
}
}