当前位置:  编程技术>.net/c#/asp.net

c#操作json示例分享

    来源: 互联网  发布时间:2014-10-29

    本文导语:  1..NET对JSON的支持介绍 (1)操作Json的DLL介绍 .NET自身有System.Runtime.Serialization.dll与System.Web.Extensions.dll,使用这两个DLL可以把对象序列化和反序列化成Json数据。也可以使用第三方的Newtonsoft.Json.dll来操作Json数据,使用它会更方便的...

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 Languages;//编程语言
public Programmer(string name, bool sex, List 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:userslizw桌面ObjectJson.txt";
List languages = null;
List list = new List();
languages = new List(new string[] { "C#", "Java" });
list.Add(new Programmer("李志伟", true, languages));
languages = new List(new string[] { "C#", "C++" });
list.Add(new Programmer("Coder2", false, languages));
languages = new List(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(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 Languages;//编程语言

public Programmer() { }//必须有此构造方法,否者无法反序列化

public Programmer(string name, bool sex, List 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 languages = null;

List list = new List();

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

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

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

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

languages = new List(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 + "
");//前台输出

//反序列化对象

list.Clear();

list = jsonSerialize.Deserialize(jsonStr);

foreach (Programmer p in list)

{

Response.Write(p + "
");//前台输出

}

}

}

得到的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 Languages;

public Programmer(string name, bool sex, List 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:userslizw桌面ObjectJson.txt";

List languages = null;

List list = new List();

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

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

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

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

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

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

//序列化对象

DataContractJsonSerializer ser =

new DataContractJsonSerializer(typeof(List));

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

}
}


    
 
 

您可能感兴趣的文章:

  • c#对象中两种copy操作:深拷贝(Deep Copy)与浅拷贝(Shallow Copy)
  • c#的时间日期操作示例分享(c#获取当前日期)
  • .NET下 c#通过COM组件操作并导出Excel实例代码
  • C#操作txt文件,进行清空添加操作的小例子
  • C#实现装箱与拆箱操作简单实例
  • 浅谈C#互操作的内存溢出问题
  • C# 中的??操作符浅谈
  • c#剪切板操作的简单实例
  • c# 调用Surfer软件,添加引用的具体操作方法
  • c#异步task示例分享(异步操作)
  • c#下注册表操作的一个小细节
  • C#操作CLOB大对象的代码一例
  • c#判断操作系统位数实例代码
  • 一些关于c#与Sql的时间的操作
  • c#判断操作系统位数的示例分享
  • C#中的位操作小结
  • C# 操作符之三元操作符浅析
  • C# Dictionary操作范例(入门新手参考)
  • C#的WebBrowser操作frame实例解析
  • C# Winform 操作 INI 配置文件的实现代码
  • C#程序最小化到托盘图标操作步骤与实现代码
  • Html checkbox标签如何设置默认选中以及用js操作checkbox代码示例
  • yii操作cookie方法示例
  • html form标签用法(js操作form)介绍及代码示例
  • Thinkphp实现MySQL读写分离操作示例
  • c#/ASP.NET操作cookie(读写)代码示例
  • python读取csv文件示例(python操作csv)
  • python读写文件操作示例程序
  • 使用python删除nginx缓存文件示例(python文件操作)
  • jquery操作text,radio,checkbox,select示例代码
  • java使用pdfbox操作pdf文件示例
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • python赋值操作方法分享
  • svn服务器启动和svn服务器重启、停止等操作脚本分享
  • python读写文件操作示例程序 iis7站长之家
  • jquery操作cookie插件分享
  • jQuery 操作下拉列表框的实例分享
  • jquery操作HTML5 的data-*的用法实例分享
  • jquery下拉select控件操作方法分享(jquery操作select)
  • java使用jdbc操作数据库示例分享
  • python列表操作使用示例分享
  • C#在后台运行操作(BackgroundWorker用法)示例分享
  • 文本域光标操作的jQuery扩展分享
  • commons io文件操作示例分享
  • java中vector与hashtable操作实例分享
  • php 5.2.x 数组操作细节分享
  • java实现mysql操作类分享 java连接mysql
  • 使用JAVA实现高并发无锁数据库操作步骤分享
  • 总结的7个shell字符串操作方法和实例分享
  • c语言链表操作示例分享
  • .NET操作Excel实例分享
  • asp.net操作xml增删改示例分享
  • C++ Stacks(堆栈) 成员 操作:比较和分配堆栈
  • 谁有操作系统PV操作的例子???谁有操作系统PV操作的例子???谢谢!!
  • C++ Strings(字符串) 成员 Operators:操作符,用于字符串比较和赋值
  • 已安装了Windows操作系统,还想安装Linux。却还想在开机选择操作系统时由Windows引导,请问如何操作。在线等待
  • C++ I/O 成员 flags():操作flags
  • 请问LINUX操作系统是怎样对外围设备进行操作的
  • C++ I/O 成员 width():操作域宽度
  • 什么样的操作最耗费服务器的IO操作?
  • Xcode介绍及创建工程和工程依赖操作步骤
  • 无操作系统下对U盘的操作
  • MyEclipse如何查看和设置文件编码格式相关操作


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3