代码拉取完成,页面将自动刷新
Json序列化与反序列化
3.0重构,大幅度增加可拓展性,性能有所下降,后续优化
http://cnblogs.com/blqw/p/json.html
使用方便 ,性能卓越
3.0可以很方便的重定义某个类的序列化行为
class TestClass2
{
public Regex Regex { get; set; }
}
class TestClass2Writer : IJsonWriter
{
public Type Type => typeof(TestClass2);
public void Write(object obj, JsonWriterArgs args)
{
var o = (TestClass2)obj;
args.Writer.Write($"\"Regex\":/{o.Regex.ToString()}/g");
}
}
static void Main(string[] args)
{
var t2 = new TestClass2()
{
Regex = new Regex("^[0-9]{4,6}$")
};
var str2 = t2.ToJsonString(); //{"Regex":/^[0-9]{4,6}$/g}
Console.WriteLine(str2);
}
输出: {"Regex":/^[0-9]{4,6}$/g}
另一种简单的方式
class TestClass1 : IObjectReference
{
public int ID { get; set; }
public string Name { get; set; }
public object GetRealObject(StreamingContext context)
{
if (context.Context is JsonWriterArgs)
{
return new {id = this.ID, name = this.Name};
}
return this;
}
}
static void Main(string[] args)
{
var t1 = new TestClass1()
{
ID = 1,
Name = "blqw",
};
var str1 = t1.ToJsonString(); //{"id":1,"name":"blqw"}
Console.WriteLine(str1);
}
输出: { "id":1,"name":"blqw"}
blqw.Json.ToJsonString(object);
blqw.Json.ToObject<T>(string);
blqw.Json.ToObject(string);
blqw.Json.ToObject(Type,string);
//2014.07.29 新增
blqw.Json.ToJsonObject(string);
//2014.08.08 新增
blqw.Json.ToJsonString(object,JsonBuilderSettings);
//2014.10.25 新增
blqw.Json.ToDynamic(string);
##更新说明
blqw.IOC
和blqw.Convert3
升级到最新正式版blqw.IOC
和blqw.Convert3
"\" \\ \/ \b \f \n \r \t
其他控制类字符转为\u****
\0 \a \v \'
IJsonObject
接口ILoadJson
接口IList
的序列化性能IJsonObject
,现在实现它也必须现实IEnumerable<IJsonObject>
接口,所以可以直接foreach
操作IToJson
,ILoadJson
允许对象自定义序列化和反序列化的部分行为Literacy
,增加2个转换全半角的方法void AppendDataReader(IDataReader reader)
方法命名错误的问题(一直写成void AppendDataSet(IDataReader reader)
)[{"columnName1":"value1","columnName2":"value2"},{"columnName1":"value3","columnName2":"value4"}]
(之前是{"columns":["columnName1","columnName2"],"values":[["value1","value2"],["value3","value4"]]}
) var str = "{ Name : \"blqw\", Age : 11 ,Array : [\"2014-1-1 1:00:00\",false,{ a:1,b:2 }] }";
dynamic json = Json.ToDynamic(str);
Console.WriteLine(json.Name);
Console.WriteLine(json.Age);
Console.WriteLine(((DateTime)json.Array[0]).ToShortDateString());
Console.WriteLine(((bool)json.Array[1]) == false);
Console.WriteLine(json.Array[2].a);
Console.WriteLine(json.Array[2].b);
User user = User.TestUser();
IJsonObject jobj = Json.ToJsonObject(Json.ToJsonString(user));
Console.WriteLine(user.Name == jobj["Name"].ToString());
Console.WriteLine(user.LoginHistory[0] == Convert.ToDateTime(jobj["LoginHistory"][0]));
Console.WriteLine(user.Info.Phone["手机"] == jobj["Info"]["Phone"]["手机"].ToString());
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型