欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c#操作json示例分享

 更新時(shí)間:2014年03月26日 11:20:55   作者:  
這篇文章主要介紹了c#操作json示例,需要的朋友可以參考下

1..NET對JSON的支持介紹

(1)操作Json的DLL介紹

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

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

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

2.JSON序列化和反序列化

(1)使用Newtonsoft.Json.dll實(shí)現(xiàn)

代碼示例:

復(fù)制代碼 代碼如下:

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);//將對象轉(zhuǎn)換成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序列化對象時(shí),只能序列化對象的公有成員。

(2)使用System.Web.Extensions.dll實(shí)現(xiàn)

代碼示例:

復(fù)制代碼 代碼如下:

public class Person

{

public string Name;//姓名

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

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

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() { }//必須有此構(gòu)造方法,否者無法反序列化

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);//將對象轉(zhuǎn)換成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序列化對象時(shí),除了只能序列化對象的公有成員外,被序列化的對象還必須有無參的構(gòu)造方法才能被反序列化!System.Web.Extensions.dll只能在Web項(xiàng)目中引用,在控制臺和WinFrom項(xiàng)目中無法引用!

(3)使用System.Runtime.Serialization.dll實(shí)現(xiàn)

代碼示例:

復(fù)制代碼 代碼如下:

[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);//將對象轉(zhuǎn)換成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();//關(guān)閉內(nèi)存流

Console.WriteLine("OK!");

Console.Read();

}

}
[code]

得到的Json文本:

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

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

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

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

(4)小結(jié)

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

(1)使用JsonTextReader類進(jìn)行只進(jìn)讀取(不常用)
[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進(jìn)行讀取(常用)

復(fù)制代碼 代碼如下:

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時(shí)間字符串的處理

復(fù)制代碼 代碼如下:

class Program

{

static void Main(string[] args)

{

DateTime time = DateTime.Now;

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

IsoDateTimeConverter timeConverter = new IsoDateTimeConverter();

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

//序列化時(shí)間

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

Console.WriteLine(JsonStr);

//反序列化時(shí)間

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

Console.WriteLine(time2);

Console.WriteLine("OK!");

Console.Read();

}

}

4.讀取Json字符串的技巧

(1)使用匿名類

復(fù)制代碼 代碼如下:

class Program

{

static void Main(string[] args)

{

//Json字符串

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

//創(chuàng)建匿名類

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)使用索引器

復(fù)制代碼 代碼如下:

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

}
}

相關(guān)文章

  • C#多線程處理多個(gè)隊(duì)列數(shù)據(jù)的方法

    C#多線程處理多個(gè)隊(duì)列數(shù)據(jù)的方法

    這篇文章主要介紹了C#多線程處理多個(gè)隊(duì)列數(shù)據(jù)的方法,涉及C#線程與隊(duì)列的相關(guān)操作技巧,需要的朋友可以參考下
    2015-07-07
  • C#函數(shù)式編程中的緩存技術(shù)詳解

    C#函數(shù)式編程中的緩存技術(shù)詳解

    這篇文章主要介紹了C#函數(shù)式編程中的緩存技術(shù)詳解,本文我們將分成兩部分來講解,第一部分為預(yù)計(jì)算,第二部分則為緩存,需要的朋友可以參考下
    2015-01-01
  • 利用C#實(shí)現(xiàn)繪制出地球旋轉(zhuǎn)效果

    利用C#實(shí)現(xiàn)繪制出地球旋轉(zhuǎn)效果

    這篇文章主要為大家詳細(xì)介紹了如何利用C#語言實(shí)現(xiàn)繪制出地球旋轉(zhuǎn)的效果,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,需要的可以了解一下
    2023-02-02
  • C#中Abstract 、Virtual和Override的使用及區(qū)別

    C#中Abstract 、Virtual和Override的使用及區(qū)別

    C#中virtual,abstract,override用于方法重載,子類覆蓋了父類的相同方法,父類中的實(shí)現(xiàn)不可能再被外面調(diào)用。本文給大家重點(diǎn)介紹C#中Abstract 、Virtual和Override的使用及區(qū)別,需要的朋友參考下吧
    2021-06-06
  • C#實(shí)現(xiàn)日期格式轉(zhuǎn)換的公共方法類實(shí)例

    C#實(shí)現(xiàn)日期格式轉(zhuǎn)換的公共方法類實(shí)例

    這篇文章主要介紹了C#實(shí)現(xiàn)日期格式轉(zhuǎn)換的公共方法類,結(jié)合完整實(shí)例形式分析了C#針對各種常見日期格式的轉(zhuǎn)換方法,涉及C#字符串、日期、時(shí)間相關(guān)操作技巧,需要的朋友可以參考下
    2017-01-01
  • 詳解C#多線程編程之進(jìn)程與線程

    詳解C#多線程編程之進(jìn)程與線程

    這篇文章主要介紹了詳解C#多線程編程之進(jìn)程與線程的的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • C#正則表達(dá)式實(shí)用大全(建議收藏!)

    C#正則表達(dá)式實(shí)用大全(建議收藏!)

    正則表達(dá)式是處理字符串的強(qiáng)大工具,擁有獨(dú)特的語法和獨(dú)立的處理引擎,下面這篇文章主要給大家介紹了關(guān)于C#正則表達(dá)式實(shí)用大全的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • C#多線程之線程同步WaitHandle

    C#多線程之線程同步WaitHandle

    這篇文章介紹了C#多線程之線程同步WaitHandle的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • C#自定義WPF中Slider的Autotooltip模板

    C#自定義WPF中Slider的Autotooltip模板

    這篇文章介紹了C#自定義WPF中Slider的Autotooltip模板的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • C#開啟線程的四種方式示例詳解

    C#開啟線程的四種方式示例詳解

    今天小編就為大家分享一篇關(guān)于C#開啟線程的四種方式示例詳解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-10-10

最新評論