亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

c#操作json示例分享

2020-01-24 02:44:20
字體:
來源:轉載
供稿:網友

1..NET對JSON的支持介紹

(1)操作Json的DLL介紹

.NET自身有System.Runtime.Serialization.dll與System.Web.Extensions.dll,使用這兩個DLL可以把對象序列化和反序列化成Json數據。也可以使用第三方的Newtonsoft.Json.dll來操作Json數據,使用它會更方便的操作Json數據,其功能也跟強一些。

(2)使用System.Web.Extensions.dll的限制

要使用System.Web.Extensions.dll必須是在Web項目中,只有在Web項目中才能引用此DLL。

2.JSON序列化和反序列化

(1)使用Newtonsoft.Json.dll實現

代碼示例:

復制代碼 代碼如下:

public class Person
{
public string Name;//姓名
public bool Sex;//性別,是否是男
public Person(string name, bool sex)
{
this.Name = name;
this.Sex = sex;
}
public override string ToString()
{
return "姓名:" + this.Name + "/t性別:" + (this.Sex ? "男" : "女");
}
}
public class Programmer : Person
{
public List<string> Languages;//編程語言
public Programmer(string name, bool sex, List<string> languages) : base(name, sex)
{
this.Languages = languages;
}
public override string ToString()
{
StringBuilder str = new StringBuilder();
str.Append(base.ToString() + "/t編程語言:");
foreach (string l in this.Languages)
{
str.Append(l + " ");
}
return str.ToString();
}
}
class Program
{
static void Main(string[] args)
{
string filePath = @"D:/users/lizw/桌面/ObjectJson.txt";
List<string> languages = null;
List<Programmer> list = new List<Programmer>();
languages = new List<string>(new string[] { "C#", "Java" });
list.Add(new Programmer("李志偉", true, languages));
languages = new List<string>(new string[] { "C#", "C++" });
list.Add(new Programmer("Coder2", false, languages));
languages = new List<string>(new string[] { "C#", "C++", "C", "Java" });
list.Add(new Programmer("Coder3", true, languages));
//序列化對象
string jsonStr = JsonConvert.SerializeObject(list);//將對象轉換成json存儲
File.WriteAllText(filePath, jsonStr);
list.Clear();
//反序列化對象
list = JsonConvert.DeserializeObject<List<Programmer>>(jsonStr);
foreach (Programmer p in list)
{
Console.WriteLine(p);
}
Console.WriteLine("OK!");
Console.Read();
}
}

得到的Json文本:

[{"Languages":["C#","Java"],"Name":"李志偉","Sex":true},

{"Languages":["C#","C++"],"Name":"Coder2","Sex":false},

{"Languages":["C#","C++","C","Java"],"Name":"Coder3","Sex":true}]

注意:此種方式Json序列化對象時,只能序列化對象的公有成員。

(2)使用System.Web.Extensions.dll實現

代碼示例:

復制代碼 代碼如下:

public class Person

{

public string Name;//姓名

public bool Sex;//性別,是否是男

public Person() { }//必須有此構造方法,否者無法反序列化

public Person(string name, bool sex)

{

this.Name = name;

this.Sex = sex;

}

public override string ToString()

{

return "姓名:" + this.Name + "/t性別:" + (this.Sex ? "男" : "女");

}

}

public class Programmer : Person

{

public List<string> Languages;//編程語言

public Programmer() { }//必須有此構造方法,否者無法反序列化

public Programmer(string name, bool sex, List<string> languages)

: base(name, sex)

{

this.Languages = languages;

}

public override string ToString()

{

StringBuilder str = new StringBuilder();

str.Append(base.ToString() + "/t編程語言:");

foreach (string l in this.Languages)

{

str.Append(l + " ");

}

return str.ToString();

}

}

public partial class WebForm1 : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)//Web頁面的加載事件

{

List<string> languages = null;

List<Programmer> list = new List<Programmer>();

languages = new List<string>(new string[] { "C#", "Java" });

list.Add(new Programmer("李志偉", true, languages));

languages = new List<string>(new string[] { "C#", "C++" });

list.Add(new Programmer("Coder2", false, languages));

languages = new List<string>(new string[] { "C#", "C++", "C", "Java" });

list.Add(new Programmer("Coder3", true, languages));

//序列化對象

JavaScriptSerializer jsonSerialize = new JavaScriptSerializer();

string jsonStr = jsonSerialize.Serialize(list);//將對象轉換成json存儲

Response.Write(jsonStr + "<br>");//前臺輸出

//反序列化對象

list.Clear();

list = jsonSerialize.Deserialize<List<Programmer>>(jsonStr);

foreach (Programmer p in list)

{

Response.Write(p + "<br>");//前臺輸出

}

}

}

得到的Json文本:

[{"Languages":["C#","Java"],"Name":"李志偉","Sex":true},

{"Languages":["C#","C++"],"Name":"Coder2","Sex":false},

{"Languages":["C#","C++","C","Java"],"Name":"Coder3","Sex":true}]

注意:此種方式Json序列化對象時,除了只能序列化對象的公有成員外,被序列化的對象還必須有無參的構造方法才能被反序列化!System.Web.Extensions.dll只能在Web項目中引用,在控制臺和WinFrom項目中無法引用!

(3)使用System.Runtime.Serialization.dll實現

代碼示例:

復制代碼 代碼如下:

[DataContract]//必須申明,否則無法序列化

public class Person

{

[DataMember(Name = "姓名")]//必須申明,否則無法序列化

private string Name;

[DataMember(Name = "性別")]//必須申明,否則無法序列化

private bool Sex;

public Person(string name, bool sex)

{

this.Name = name;

this.Sex = sex;

}

public override string ToString()

{

return "姓名:" + this.Name + "/t性別:" + (this.Sex ? "男" : "女");

}

}

[DataContract]

public class Programmer : Person

{

[DataMember(Name = "編程語言")]

private List<string> Languages;

public Programmer(string name, bool sex, List<string> languages)

: base(name, sex)

{

this.Languages = languages;

}

public override string ToString()

{

StringBuilder str = new StringBuilder();

str.Append(base.ToString() + "/t編程語言:");

foreach (string l in this.Languages)

{

str.Append(l + " ");

}

return str.ToString();

}

}

class Program

{

static void Main(string[] args)

{

string filePath = @"D:/users/lizw/桌面/ObjectJson.txt";

List<string> languages = null;

List<Programmer> list = new List<Programmer>();

languages = new List<string>(new string[] { "C#", "Java" });

list.Add(new Programmer("李志偉", true, languages));

languages = new List<string>(new string[] { "C#", "C++" });

list.Add(new Programmer("Coder2", false, languages));

languages = new List<string>(new string[] { "C#", "C++", "C", "Java" });

list.Add(new Programmer("Coder3", true, languages));

//序列化對象

DataContractJsonSerializer ser =

new DataContractJsonSerializer(typeof(List<Programmer>));

MemoryStream ms = new MemoryStream();

ser.WriteObject(ms, list);//將對象轉換成json存儲

string jsonStr = Encoding.UTF8.GetString(ms.ToArray());

File.WriteAllText(filePath, jsonStr);

//反序列化對象

list.Clear();

ms.Position = 0;

list = (List<Programmer>)ser.ReadObject(ms);

foreach (Programmer p in list)

{

Console.WriteLine(p);

}

ms.Dispose();//關閉內存流

Console.WriteLine("OK!");

Console.Read();

}

}
[code]

得到的Json文本:

[{"姓名":"李志偉","性別":true,"編程語言":["C#","Java"]},

{"姓名":"Coder2","性別":false,"編程語言":["C#","C++"]},

{"姓名":"Coder3","性別":true,"編程語言":["C#","C++","C","Java"]}]

注意:此種方式Json序列化對象時,可以序列化對象的任意成員(包括私有成員),但是使用此方式必須要在類和成員的定義處加上相應的特性(具體請參考代碼)。

(4)小結

3.解析JSON字符串(使用Newtonsoft.Json.dll)

(1)使用JsonTextReader類進行只進讀取(不常用)
[code]
class Program

{

static void Main(string[] args)

{

//Json字符串

string jsonStr = @"

[{'Languages':['C#','Java'],'Name':'李志偉','Sex':true},

{'Languages':['C#','C++'],'Name':'Coder2','Sex':false},

{'Languages':['C#','C++','C','Java'],'Name':'Coder3','Sex':true}]";

JsonTextReader json = new JsonTextReader(new StringReader(jsonStr));

while (json.Read())

{

Console.WriteLine(json.Value + "--" + json.TokenType + "--" + json.ValueType);

}

Console.WriteLine("OK!");

Console.Read();

}

}

(2)使用JArray、JObject、JToken進行讀取(常用)

復制代碼 代碼如下:

class Program

{

static void Main(string[] args)

{

//Json字符串

string jsonStr = @"

[{'Languages':['C#','Java'],'Name':'李志偉','Sex':true},

{'Languages':['C#','C++'],'Name':'Coder2','Sex':false},

{'Languages':['C#','C++','C','Java'],'Name':'Coder3','Sex':true}]";

JArray ja = (JArray)JsonConvert.DeserializeObject(jsonStr);

foreach (JToken jt in ja)

{

JObject jo = (JObject)jt;

JArray temp = (JArray)jo["Languages"];

foreach (JToken token in temp)

{

Console.Write(token+" ");

}

Console.WriteLine("/t" + jo["Name"] + "/t" + jo["Sex"]);

}

Console.WriteLine("OK!");

Console.Read();

}

}

(3)Json時間字符串的處理

復制代碼 代碼如下:

class Program

{

static void Main(string[] args)

{

DateTime time = DateTime.Now;

//這里使用自定義日期格式

IsoDateTimeConverter timeConverter = new IsoDateTimeConverter();

timeConverter.DateTimeFormat = "北京時間:yyyy-MM-dd HH:mm:ss";

//序列化時間

string JsonStr = JsonConvert.SerializeObject(time, timeConverter);

Console.WriteLine(JsonStr);

//反序列化時間

DateTime time2 = JsonConvert.DeserializeObject<DateTime>(JsonStr, timeConverter);

Console.WriteLine(time2);

Console.WriteLine("OK!");

Console.Read();

}

}

4.讀取Json字符串的技巧

(1)使用匿名類

復制代碼 代碼如下:

class Program

{

static void Main(string[] args)

{

//Json字符串

string jsonStr = @"{'Languages':['C#','Java'],'Name':'李志偉','Sex':true}";

//創建匿名類

var TempClass = new { Languages = new string[0], Name = string.Empty, Sex = false };

//反序列化

var O = JsonConvert.DeserializeAnonymousType(jsonStr, TempClass);

Console.WriteLine(O.Name+"/t"+O.Sex+"/t"+O.Languages[1]);

Console.Read();

}

}

(2)使用索引器

復制代碼 代碼如下:

class Program

{

static void Main(string[] args)

{

//Json字符串

string jsonStr = @"{'Languages':['C#','Java'],'Name':'李志偉','Sex':true}";

//反序列化

JObject O = JsonConvert.DeserializeObject(jsonStr) as JObject;

//使用索引器訪問

Console.WriteLine(O["Name"] + "/t" + O["Sex"] + "/t" + O["Languages"][1]);

Console.Read();

}
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
最近2019中文字幕一页二页| 久久久精品国产一区二区| 久久99久久99精品中文字幕| 最新69国产成人精品视频免费| 亚洲另类激情图| 久久久久久久久久av| 欧美性色视频在线| 日韩在线中文字幕| 日韩不卡中文字幕| 欧美黑人性生活视频| 国产欧美一区二区三区视频| 欧美性生交大片免费| 亚洲r级在线观看| 久久综合久久八八| 成人黄色免费片| 国产在线拍揄自揄视频不卡99| 性欧美长视频免费观看不卡| 欧美理论电影在线播放| 亚洲自拍另类欧美丝袜| 97色在线观看免费视频| 亚洲视频综合网| 久久久亚洲影院| 亚洲精美色品网站| 国产精品白嫩初高中害羞小美女| 亚洲丁香久久久| 精品国内自产拍在线观看| 亚洲成人中文字幕| 欧美一区二区三区精品电影| 亚洲精品成a人在线观看| 亚洲美女精品成人在线视频| 少妇av一区二区三区| 欧美精品精品精品精品免费| 日韩欧美在线第一页| 久久视频这里只有精品| 亚洲国产日韩欧美在线99| 亚洲xxxx做受欧美| 亚洲欧美日本伦理| 在线观看欧美成人| 国产成人精品a视频一区www| 国产91在线高潮白浆在线观看| 欧美大奶子在线| 国产69久久精品成人看| 国产亚洲一区二区在线| 91精品久久久久久久| 91精品国产九九九久久久亚洲| 在线电影av不卡网址| 亚洲国产精久久久久久| 日韩av毛片网| 色哟哟入口国产精品| 国产精品 欧美在线| 欧美裸体男粗大视频在线观看| 亚洲毛茸茸少妇高潮呻吟| 精品久久久免费| 国产一区二区三区三区在线观看| 奇米成人av国产一区二区三区| 91产国在线观看动作片喷水| 欧美在线亚洲一区| 中文字幕亚洲欧美在线| 国模私拍视频一区| 奇米一区二区三区四区久久| 在线日韩av观看| 日韩国产在线看| 国产精品久久77777| 欧美日韩国产丝袜另类| 国产成人精品一区| 中文字幕一区二区三区电影| 欧美精品在线视频观看| 久久99精品国产99久久6尤物| 国产精品av在线| 亚洲网站在线观看| 综合网日日天干夜夜久久| 久久精品国产久精国产一老狼| 国产成人精品日本亚洲| 欧美成人四级hd版| 日本高清视频一区| 日韩成人av网| 亚洲精品动漫久久久久| 亚洲国产精品人久久电影| 国产精品96久久久久久又黄又硬| 欧美午夜精品久久久久久人妖| 色播久久人人爽人人爽人人片视av| 国产精品www| 青草热久免费精品视频| 91国产高清在线| 日韩福利伦理影院免费| 亚洲国产欧美一区| 久热在线中文字幕色999舞| 国产激情综合五月久久| 久久精品国产一区| 亚洲第一精品福利| 亚洲国产免费av| 91影视免费在线观看| 日韩美女av在线免费观看| 国产精品自在线| 欧美激情一级精品国产| 久久亚洲精品网站| 欧美大片免费观看| 欧美国产欧美亚洲国产日韩mv天天看完整| 成人免费视频在线观看超级碰| 亚洲美女性生活视频| 久久免费精品日本久久中文字幕| 日本在线观看天堂男亚洲| 久久国产精品久久精品| 国产欧美在线播放| 中文字幕日韩欧美精品在线观看| 成人在线国产精品| 色琪琪综合男人的天堂aⅴ视频| 午夜免费久久久久| 亚洲成人av片| 欧美在线激情视频| 大荫蒂欧美视频另类xxxx| 18一19gay欧美视频网站| 欧美激情videoshd| 亚洲**2019国产| 色香阁99久久精品久久久| 国产日韩欧美在线看| 亚洲国内精品在线| 欧美成人午夜剧场免费观看| 欧美日韩精品在线| 国产精品欧美日韩久久| 狠狠躁夜夜躁人人躁婷婷91| 黑人极品videos精品欧美裸| 欧美视频中文字幕在线| 成人做爰www免费看视频网站| 成人av.网址在线网站| 国自在线精品视频| 一区二区三区动漫| 久久最新资源网| 成人福利免费观看| 欧美综合一区第一页| 亚洲美腿欧美激情另类| 92国产精品久久久久首页| 奇米四色中文综合久久| 欧美电影在线观看完整版| 精品激情国产视频| 日韩最新免费不卡| 色伦专区97中文字幕| 高清视频欧美一级| 国产精品久久77777| 91在线国产电影| 日韩在线观看免费全集电视剧网站| 亚洲一区二区三区毛片| 国产精品亚洲视频在线观看| 久久综合免费视频影院| 91天堂在线视频| 国产精品揄拍500视频| 国产视频亚洲精品| 97精品久久久| 亚洲人成在线免费观看| 亚洲免费视频在线观看| 成人美女av在线直播| 日本电影亚洲天堂| 亚洲精品在线不卡| 久久久精品视频在线观看| 69av视频在线播放| 91wwwcom在线观看| 亚洲娇小xxxx欧美娇小| 欧美午夜xxx| 富二代精品短视频| 亚洲第一国产精品| 韩国精品美女www爽爽爽视频| 亚洲美腿欧美激情另类| 日韩电影免费在线观看| 日韩欧美在线免费|