1 Star 0 Fork 0

dpzsoft/dotnet-core-dpz2-json

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

dotnet-core-dpz2-json

基于dpz2开发套件的Json应用扩展(.Net Core),包括一套自行研发的json解析算法及相关的扩展操作

应用于更加简单的使用场景

在dpz2.Json诞生之前,我们一直使用的是Newtonsoft.Json解析库,Newtonsoft.Json最方便的地方是采用了类似JavaBean的绑定方式进行操作,但是实际操作时,我们可能更多时候只想要个解析器,好让我们能快速的辨别数据,这个时候,单纯的JavaBean方式又变得比较肘制,读取数据使用C#的动态类型确实可以比较方便的进行操作。

专注于直接操作

另外一个促使我们自研一个解析库的重要原因,就是Json语句的生成,如果生成数据类,确实可以达到快速生成的目的,但是为每一个Json都生成数据类,将会大大的更加程序的开发成本。

举一个简单典型的Json数据示例:

{
	aaa:{
		bbb:[111,222],
		cc:"abc"
	},
	ddd:"qaz"
}

如果使用Newtonsoft.Json在不生成数据类的情况下,依靠C#的动态类型来完成:

dynamic obj = new Newtonsoft.Json.Linq.JObject();
dynamic aaa = obj.aaa = new Newtonsoft.Json.Linq.JObject();
Newtonsoft.Json.Linq.JArray bbb = aaa.bbb = new Newtonsoft.Json.Linq.JArray();
bbb.Add(111);
bbb.Add(222);
aaa.cc = "abc";
obj.ddd = "qaz";
Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(obj));

可以看到,如果不清楚Newtonsoft.Json下的各种类型,将会非常头疼。

如果使用dpz2.Json,可以有效的避免这个问题:

using (var json = new dpz2.Json.JsonObject()) {
	var aaa = json.Object("aaa");
	var bbb = aaa.Array("bbb");
	bbb.Number(0).Value = 111;
	bbb.Number(1).Value = 222;
	aaa.String("cc").Value = "abc";
	json.String("ddd").Value = "qaz";
	Console.WriteLine(json.ToJsonString());
}

如果不想使用中间变量,也可以使用直接多层操作方式(这种方式的层次非常分明,但是运行效率略慢):

using (var json = new dpz2.Json.JsonObject()) {
	json.Object("aaa").Array("bbb").Number(0).Value = 111;
	json.Object("aaa").Array("bbb").Number(1).Value = 222;
	json.Object("aaa").String("cc").Value = "abc";
	json.String("ddd").Value = "qaz";
	Console.WriteLine(json.ToJsonString());
}

为了方便操作数据,我们提供了函数模式和索引模式两种含义不同的操作方式:函数模式为添加/访问自适应模式,即如访问的对象不存在,将自动添加对象;而索引模式则为访问模式,如访问的对象不存在,将会返回Null空对象。 两种操作方式可以更具需要自由排列组合,如上例代码可以修改为:

using (var json = new dpz2.Json.JsonObject()) {
	json.Object("aaa").Array("bbb").Number(0).Value = 111;
	json["aaa"]["bbb"].Number(1).Value = 222;
	json["aaa"].String("cc").Value = "abc";
	json.String("ddd").Value = "qaz";
	Console.WriteLine(json.ToJsonString());
}

我们提供了两种方式获取数据(两种方式是等价的,效率相仿,可按实际需求使用):

double b1 = json.Object("aaa").Array("bbb").Number(0).Value;
double b1 = json["aaa"]["bbb"][0].GetNumber();

支持对象的序列化和反序列化

为了增加本类库的适用场景,自1.0.1908.2版本开始,类库将支持标准.Net对象的序列化和反序列化,代码如下(反序列化时,以TestObject类型为例):

// 反序列化
TestObject obj = (TestObject)dpz2.Json.Parser.DeserializeObject(str, typeof(TestObject));
// 序列化
string str = dpz2.Json.Parser.SerializeObject(obj);
MIT License Copyright (c) 2019 d.p.z Software Studio Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

基于dpz2开发套件的Json应用扩展(.Net Core),包括一套自行研发的json解析算法及相关的扩展操作 展开 收起
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/dpzsoft/dotnet-core-dpz2-json.git
git@gitee.com:dpzsoft/dotnet-core-dpz2-json.git
dpzsoft
dotnet-core-dpz2-json
dotnet-core-dpz2-json
master

搜索帮助

371d5123 14472233 46e8bd33 14472233