-
Notifications
You must be signed in to change notification settings - Fork 16
XiaoFeng.Json Json序列化
Jacky edited this page Mar 8, 2023
·
1 revision
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序列化,反序列化就讲到这里,具体操作还需要自己去实践操作。