代码拉取完成,页面将自动刷新
JSON序列化工具,无第三方依赖,可单独复制JsonMini.cs类文件使用,仅1000多行代码
最低适用于net 4.0及以后版本,除了数组、集合和基础类型,还包括Color、Point、DataTable、DataSet和Byte[]的序列化和反序列化,兼容Newstonsoft.Json序列化结果
复制JsonMini.cs一个文件到自己项目中,就可以使用两个拓展方法JSONFrom()反序列化和JSONTo()序列化
string str = "{\"state\":true,\"time\":\"2020-10-10 1:2:1\",\"num\":-33,\r\n\t\f \"name\":\"你好\r\n\t\f左\b右,\\\"世界\\\"\",\"age\":9.9,\"yy\":{\"sex\":null}}";
Dictionary<string, object> t1 = str.JSONFrom();
string str = "{\"Name\":\"高老师\",\"Num\":3.1415926,\"Col\":\"2,3,4\"}";
Teacher t1 = str.JSONFrom<Teacher>();
dynamic t2 = str.JSONFrom<dynamic>();
List<Student> list = new List<Student>();
string t1 = list.JSONTo();
string str1 = "{\"A\":{\"a\":1,\"b\":2}}";
string str2 = "{\"A\":[1,2]}";
var dy1 = str1.JSONFrom();
if (dy1["A"] is IList)
Console.WriteLine("d1里是数组");
var dy2 = str2.JSONFrom();
if (dy2["A"] is IList)
Console.WriteLine("d2里是数组");
//JObject
Dictionary<string, object> dict = new Dictionary<string, object>();
dict.Add("name", "tom");
dict.Add("age", 18);
//JArray
List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();
list.Add(dict);
//序列化和反序列化
var stringArr = list.JsonTo();
Console.WriteLine(stringArr);
var Arr = stringArr.JsonFrom<List<Dictionary<string, object>>>();
class UserItem
{
public User User { get; set; }
public int UserId { get; set; }
}
class User
{
public string Name { get; set; }
//过滤掉无限递归引用的问题字段
[FastIgnore]
public UserItem Bad { get; set; }
}
string str = "{\"Name\":\"\\u4f60\\u597d\"}";
string json = str.JsonFrom().JsonTo();
Console.WriteLine(json);// "{\"Name\":\"你好\"}";
//第二个参数,传入空格分隔的字符串,直接获取到tgt字段的内容
string result = "{\"type\":\"ZH_CN2EN\",\"errorCode\":0,\"elapsedTime\":0,\"translateResult\":[[{\"src\":\"有人在家吗\",\"tgt\":\"Is anyone home?\"}]]}";
var tgt= JsonMini.PickData(result, "translateResult 0 0 tgt");
//获取到数组类型元素的数量,然后按该数量循环,使用PickData依次获取数组里所有元素
string json = "{\"Student\":[{\"Name\":\"Lucy\"},{\"Name\":\"Jack\"},{\"Name\":\"Tom\"}]}";
int count = JsonMini.ArrayCount(json, "Student");
public class TT
{
public string[] Data { get; set; }
}
static void Main(string[] args)
{
string s = "{\"Data\":[\"a\",\"回车符\\r换行符\\n退格符\\b水平制表符\\t换页符\\f单引号\\\'双引号\\\"\"]}";
var x = Newtonsoft.Json.JsonConvert.DeserializeObject<TT>(s);
var y = s.JsonFrom<TT>();
Console.WriteLine("--------------------------------");
Console.WriteLine(x.Data[1]);
Console.WriteLine(y.Data[1]);
Console.WriteLine("--------------------------------");
var xx = Newtonsoft.Json.JsonConvert.SerializeObject(x);
Console.WriteLine(xx);
var yy = y.JsonTo();
Console.WriteLine(yy);
}
更新日志 | 版本 |
---|---|
2023-11-16 | 1.0.12 |
1、进行优化 | |
2023-09-19 | 1.0.11 |
1、按群友的反馈,添加了对字符串二次转义后的解析支持 | |
2023-09-16 | 1.0.10 |
1、添加了在实体类继承父类时,同样按父类的FastIgnore特性去过滤 | |
2、按照用户MLing592建议增加了类似JsonConvert.DeserializeObject(string value, Type t)的序列化 | |
2023-09-06 | 1.0.9 |
1、修复了序列化时没有将字符串里转义字符进行处理 | |
2023-05-31 | 1.0.8 |
1、修复了序列化时没有将对象里的双引号进行转义,导致反序列化失败的严重bug | |
2023-05-15 | 1.0.7 |
1、添加动态获取字段,PickData和ArrayCount方法 | |
2023-01-03 | 1.0.6 |
1、优化代码结构,防止私有拓展方法全局污染 | |
2022-12-29 | 1.0.5 |
1、添加对unicode字符串的解析 | |
2022-12-28 | 1.0.4 |
1、修复了转DataTable时,字段存在null报错问题 | |
2、添加了对nullable的支持 | |
3、修改命名空间为System,方便使用 | |
2022-12-26 | 1.0.3 |
1、添加了对枚举的反序列化支持 |
//10万次序列化测试,JsonMini耗时559毫秒,Newtonsoft.Json耗时1382毫秒
Test.TimeTest();//测试耗时
Test.JsonTest();//测试转义字符
public class Test
{
public class TT
{
public string[] Data { get; set; }
}
public static void JsonTest()
{
string s = "{\"Data\":[\"a\",\"空字符\0故障码\a回车符\r换行符\n退格符\b水平制表符\t垂直制表符\v换页符\f单引号\'双引号\\\"\"]}";
var x = Newtonsoft.Json.JsonConvert.DeserializeObject<TT>(s);
var y = s.JsonFrom<TT>();
Console.WriteLine("--------------------------------");
Console.WriteLine(x.Data[1]);
Console.WriteLine(y.Data[1]);
Console.WriteLine("--------------------------------");
var x2 = Newtonsoft.Json.JsonConvert.SerializeObject(x);
Console.WriteLine(x2);
var y2 = y.JsonTo();
Console.WriteLine(y2);
var x3 = Newtonsoft.Json.JsonConvert.DeserializeObject<TT>(x2);
var y3 = y2.JsonFrom<TT>();
var x4 = Newtonsoft.Json.JsonConvert.SerializeObject(x3);
Console.WriteLine(x4);
var y4 = y3.JsonTo();
Console.WriteLine(y4);
}
public class Tearcher
{
public string Name { get; set; }
public float Num { get; set; }
public Color Col { get; set; }
}
public static void TimeTest(int count = 100000)
{
string s = "{\"Name\":\"高老师\",\"Num\":3.1415926,\"Col\":\"2,3,4\"}";
Stopwatch sw = Stopwatch.StartNew();
for (int i = 0; i < count; i++)
{
var a1 = Newtonsoft.Json.JsonConvert.DeserializeObject<Tearcher>(s);
var a2 = Newtonsoft.Json.JsonConvert.SerializeObject(a1);
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
sw.Restart();
for (int i = 0; i < count; i++)
{
var a1 = s.JsonFrom<Tearcher>();
var a2 = a1.JsonTo();
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。