-
JSON序列化操作作者 : 管理员 发布于 2023-04-25 23:01:18 浏览 606 次JSON序列化操作,就是把数据对象序列化成JSON数据,也可以把JSON数据反序列化成数据对象。
JSON序列化操作,就是把数据对象序列化成JSON数据,也可以把JSON数据反序列化成数据对象。
命名空间是:XiaoFeng.Json
序列化方法 JsonParser.SerializeObject 也可以用扩展方法 ToJson()
反序列化方法 JsonParser.JsonParser.DeserializeObject() 也可以使用JsonToObject()
简单使用,看代码//序列化 var a = new { key1="value1", key2 ="value2" }.ToJson(); //a的值就是:{"key1":"value1","key2":"value2"} //反序列化 var b = @"{""key1"":""value1"",""key2"":""value2""}.JsonToObject(); //b的值就是:一个字典形式
上边用的是一个匿名对象,反序列化回来的时候因为没有设置对应的类型,所以自动转换成JsonValue类型的值;
下边详细介绍一下 序列配置,在使用Tojson,JsonToObject扩展方法时可以设置配置参数的。配置参数如下:/// <summary> /// Json格式设置 /// </summary> public class JsonSerializerSetting { #region 构造器 /// <summary> /// 无参构造器 /// </summary> public JsonSerializerSetting() { } #endregion #region 属性 /// <summary> /// Guid格式 /// </summary> public string GuidFormat { get; set; } = "D"; /// <summary> /// 日期格式 /// </summary> public string DateTimeFormat { get; set; } = "yyyy-MM-dd HH:mm:ss.fff"; /// <summary> /// 是否格式化 /// </summary> public bool Indented { get; set; } = false; /// <summary> /// 枚举值 /// </summary> public EnumValueType EnumValueType { get; set; } = 0; /// <summary> /// 解析最大深度 /// </summary> public int MaxDepth { get; set; } = 28; /// <summary> /// 是否写注释 /// </summary> public bool IsComment { get; set; } = false; /// <summary> /// 忽略大小写 key值统一变为小写 /// </summary> public bool IgnoreCase { get; set; } = false; /// <summary> /// 忽略空节点 /// </summary> public bool OmitEmptyNode { get; set; } = false; #endregion }
接下来讲一下序列化时的几个特性
//忽略属性值 JsonIgnoreAttribute //指定节点名称 JsonElement //转换类型 JsonConverterAttribute //枚举转换器 StringEnumConverter //说明转换器 DescriptionConverter
下边通过实例讲解一下;下面是一个定义好的JSON模型
/// <summary> /// JsonModel 类说明 /// </summary> public class JsonModel { #region 构造器 /// <summary> /// 无参构造器 /// </summary> public JsonModel() { } #endregion #region 属性 /// <summary> /// 属性1 /// </summary> [JsonElement("NameA")] public string FieldName1 { get; set; } /// <summary> /// 属性2 /// </summary> [JsonConverter(typeof(XiaoFeng.Json.DescriptionConverter))] [JsonElement("NameB")] public EnumValueType FieldName2 { get; set; } /// <summary> /// 属性3 /// </summary> [JsonConverter(typeof(XiaoFeng.Json.StringEnumConverter))] [JsonElement("NameC")] public EnumValueType FieldName3 { get; set; } /// <summary> /// 属性4 /// </summary> [JsonElement("NameD")] public EnumValueType FieldName4 { get; set; } #endregion #region 方法 #endregion } //使用时 var a = new JsonModel { FieldName1 = "aaaa", FieldName2 = EnumValueType.Name, FieldName3 = EnumValueType.Value, FieldName4 = EnumValueType.Value }.ToJson(); //当前转换成JSON是:{"NameA":"aaaa","NameB":"名称","NameC":"Value","NameD":0} //因为 FieldName1 被设置成了NameA FieldName2被设置成了NameB FieldName3被设置成了NameC FieldName4无设置 //两个枚举值不一样,是因为第二个设置的是读取Description内容 就是EnumValueType.Name的属性值DescriptionAttribute中设置的值 //第三个取的是Value是因为设置取的是StringEnumConverter 所以直接就转换成了名称,如果不设置则直接输出对应的数字 //反序列化时也是这样对应到实体模型中去
Json序列化,反序列化就讲到这里,具体操作还需要自己去实践操作。
所有评论(0)