c#读取json

c#读取json,第1张

先声明,以下两个方法我一直用

肯定没有问题

TXT读取方法

using System

using System.Collections.Generic

using System.ComponentModel

using System.Data

using System.Drawing

using System.Text

using System.Windows.Forms

using System.IO

namespace WindowsApplication1

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent()

}

private void Form1_Load(object sender, EventArgs e)

{

this.rT1.Text = ""

FileStream fs1 = new FileStream("2.txt", FileMode.Open)

StreamReader sr = new StreamReader(fs1)

string str1 = sr.ReadToEnd()

this.rT1.Text = str1

sr.Close()

fs1.Close()

}

}

}

----------------------------------------------------------------------------------

以下是 json的 序列和反序列

.net3.5提供了json对象序列化与反序列化的类。位置在:System.Runtime.Serialization.Json空间下。其中如果要应用这个空间还必须添加对

System.ServiceModel

System.ServiceModel.Web

这两个库文件的引用。

参考实体类:Customer

public class Customer

{

public int Unid { getset}

public string CustomerName { getset}

}

DataContractJsonSerializer

将对象序列化为 JavaScript 对象表示法 (JSON),并将 JSON 数据反序列化为对象。无法继承此类。

其中有个方法WriteObject,它的功能定义为:将对象序列化为 JavaScript 对象表示法 (JSON) 文档

它有三个方法重载,其中一个为:

public override void WriteObject(Stream stream,Object graph)

它的功能描述这:将指定对象序列化为 JavaScript 对象表示法 (JSON) 数据,并将生成的 JSON 写入流中

(一)序列化

public string ToJson(Customer customer)

{

DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(Customer))

MemoryStream ms=new MemoryStream()

ds.WriteObject(ms, customer)

string strReturn=Encoding.UTF8.GetString(ms.ToArray())

ms.Close()

return strReturn

}

创建类实例,通过它的WriteObject方法来向流写入序列化的对象,再把流写入到字符串中。就可以得到JSON对象。

测试一下:

Customer cc = new Customer {Unid=1,CustomerName="John" }

string strJson = ToJson(cc)

Console.WriteLine(strJson)

结果为:{"CustomerName":"John","Unid":1}

(二)反序列化

ReadObject方法,其描述为:反序列化 JSON(JavaScript 对象表示法)数据,并返回反序列化的对象。

它有很多重载,现在通过一种:

public override Object ReadObject(Stream stream)

它从流中得到反序列化的对象。

public object FromJson(string strJson)

{

DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(Customer))

MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(strJson))

return ds.ReadObject(ms)

}

测试:

string strJson="{\"CustomerName\":\"John\",\"Unid\":1}"

Customer c=FromJson(strJson) as Customer

Console.WriteLine(c.Unid+" "+c.CustomerName)

(三)通过泛型方法对两者进行修改

为了适应多类型实例的序列化与反序列化,通过泛型方法来实现。

public string ToJson<T>(T t)

{

DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(T))

MemoryStream ms = new MemoryStream()

ds.WriteObject(ms, t)

string strReturn = Encoding.UTF8.GetString(ms.ToArray())

ms.Close()

return strReturn

}

public T FromJson<T>(string strJson) where T:class

{

DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(T))

MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(strJson))

return ds.ReadObject(ms) as T

}

•反序列化时通过泛型约束来指定类型T为类类型。

测试:

Customer cc = new Customer {Unid=1,CustomerName="John" }

string strJsons = ToJson<Customer>(cc)

Console.WriteLine(strJsons)

string strJson="{\"CustomerName\":\"John\",\"Unid\":1}"

Customer c = FromJson<Customer>(strJson)

Console.WriteLine(c.Unid+" "+c.CustomerName)

有的是 下面是超市 请自选 JSON_checker. YAJL. js0n. LibU. json-c. json-parser. jsonsl. WJElement. M's JSON parser. cJSON. Jansson. jsmn. cson. parson. ujson4c. nxjson.

var json = { contry:{ area:{ man:"12万", women:"10万" } } }

//方式一:使用eval解析

var obj = eval(json)

alert(obj.constructor)

alert(obj.contry.area.women)

//方式二:使用Funtion函数

var strJSON = "{name:'json name'}"//得到的JSON

var obj = new Function("return" + strJSON)()//转换后的JSON对象

alert(obj.name)//json name

alert(obj.constructor)

//复杂一点的json数组数据的解析

var value1 = [{"c01":"1","c02":"2","c03":"3","c04":"4","c05":"5","c06":"6","c07":"7","c08":"8","c09":"9"}, {"c01":"2","c02":"4","c03":"5","c04":"2","c05":"8","c06":"11","c07":"21","c08":"1","c09":"12"}, {"c01":"5","c02":"1","c03":"4","c04":"11","c05":"9","c06":"8","c07":"1","c08":"8","c09":"2"}] var obj1 = eval(value1)

alert(obj1[0].c01)

//复杂一点的json的另一种形式

var value2 = {"list":[ {"password":"1230","username":"coolcooldool"}, {"password":"thisis2","username":"okokok"}], "array":[{"password":"1230","username":"coolcooldool"},{"password":"thisis2","username":"okokok"}]}

var obj2 = eval(value2)

alert(obj2.list[0].password)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11554115.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存