diff --git a/Falcon.SugarApi/JsonSerialize/ArrayJsonConverter.cs b/Falcon.SugarApi/JsonSerialize/ArrayJsonConverter.cs index d3bd10c..6db9385 100644 --- a/Falcon.SugarApi/JsonSerialize/ArrayJsonConverter.cs +++ b/Falcon.SugarApi/JsonSerialize/ArrayJsonConverter.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Text.Json; using System.Text.Json.Serialization; @@ -16,15 +17,30 @@ namespace Falcon.SugarApi.JsonSerialize /// public override string? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { - var str = reader.GetString().ToDefault("")!; - var array = JsonSerializer.Deserialize(str) ?? new string[] { }; - return string.Join(',', array); + if (reader.TokenType != JsonTokenType.StartArray) { + throw new Exception($"传入的数据类型错误!应该为数组,现在为{reader.TokenType.ToString()}"); + } + var list = new List(); + while (reader.Read()) { + if (reader.TokenType == JsonTokenType.StartArray) { + continue; + } + if (reader.TokenType == JsonTokenType.EndArray) { + break; + } + var str = reader.GetString().ToDefault("")!; + list.Add(str); + } + return string.Join(',', list.ToArray()); } /// public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options) { var array = this.SplitChars == null ? value.SplitStr() : value.SplitStr(this.SplitChars); - var arrStr = JsonSerializer.Serialize(array); - writer.WriteStringValue(arrStr); + writer.WriteStartArray(); + for (int i = 0; i < array.Length; i++) { + writer.WriteStringValue(array[i]); + } + writer.WriteEndArray(); } } diff --git a/Falcon.SugarApi/StringExtend.cs b/Falcon.SugarApi/StringExtend.cs index 41ee913..ef3a83f 100644 --- a/Falcon.SugarApi/StringExtend.cs +++ b/Falcon.SugarApi/StringExtend.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics.CodeAnalysis; namespace Falcon.SugarApi { @@ -20,6 +21,14 @@ namespace Falcon.SugarApi /// 与IsNullOrEmpty相反 public static bool IsNotNullOrEmpty(this string? str) => !str.IsNullOrEmpty(); + /// + /// 当字符串IsNullOrEmpty为True的时候返回默认值,否则返回本身 + /// + /// 字符串 + /// 默认值 + /// 字符串本身或默认值 + public static string? ToDefault(this string? str, [NotNull] string defaultVal) => str.IsNullOrEmpty() ? defaultVal : str; + /// /// 使用全角半角的逗号句号和分号分割字符串。 ///