C语言读取多行json文件数据 用哪种库比较好, 具体怎么 *** 作

C语言读取多行json文件数据 用哪种库比较好, 具体怎么 *** 作,第1张

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

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

肯定没有问题

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)

对比

准备数据

实体类:

定义:

使用DataContractJsonSerializer

帮助类:

用法:

输出:

使用JavaScriptSerializer

// using System.Web.Script.Serialization

   

 

var jser    = new JavaScriptSerializer()

 

var json    衡铅= jser.Serialize(new List<Person>() { p1, p2 })

 

var persons = jser.Deserialize<List<Person>>(json)

使用Silverlight

使用悉轮JSON.NET

输睁拦信出:

LINQ:

其他:

输出:


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存