diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/EcommerceApplyments/CreateEcommerceApplymentRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/EcommerceApplyments/CreateEcommerceApplymentRequest.cs index f1c9f531..868696a6 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/EcommerceApplyments/CreateEcommerceApplymentRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/EcommerceApplyments/CreateEcommerceApplymentRequest.cs @@ -358,18 +358,18 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models /// 获取或设置特殊资质图片媒体文件标识 ID 列表。 /// [Newtonsoft.Json.JsonProperty("qualifications")] - [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringTypedStringIListConverter))] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.JsonTypedStringIListConverter))] [System.Text.Json.Serialization.JsonPropertyName("qualifications")] - [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.StringTypedStringIListConverter))] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.JsonTypedStringIListConverter))] public IList? QualificationPictureMediaIdList { get; set; } /// /// 获取或设置补充材料媒体文件标识 ID 列表。 /// [Newtonsoft.Json.JsonProperty("business_addition_pics")] - [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringTypedStringIListConverter))] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.JsonTypedStringIListConverter))] [System.Text.Json.Serialization.JsonPropertyName("business_addition_pics")] - [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.StringTypedStringIListConverter))] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.JsonTypedStringIListConverter))] public IList? BusinessAdditionPictureMediaIdList { get; set; } /// diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingFavor/GetMarketingFavorStockByStockIdResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingFavor/GetMarketingFavorStockByStockIdResponse.cs index 5ca72085..bd6ac0d6 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingFavor/GetMarketingFavorStockByStockIdResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingFavor/GetMarketingFavorStockByStockIdResponse.cs @@ -85,9 +85,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models /// 获取或设置指定支付方式列表。 /// [Newtonsoft.Json.JsonProperty("trade_type")] - [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringTypedStringArrayConverter))] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.JsonTypedStringArrayConverter))] [System.Text.Json.Serialization.JsonPropertyName("trade_type")] - [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.StringTypedStringArrayConverter))] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.JsonTypedStringArrayConverter))] public string[]? TradeTypeList { get; set; } /// diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Converters/Newtonsoft.Json/CommonDateTimeOffsetConverter.cs b/src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/CommonDateTimeOffsetConverter.cs similarity index 100% rename from src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Converters/Newtonsoft.Json/CommonDateTimeOffsetConverter.cs rename to src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/CommonDateTimeOffsetConverter.cs diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Converters/Newtonsoft.Json/CommonNullableDateTimeOffsetConverter.cs b/src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/CommonNullableDateTimeOffsetConverter.cs similarity index 100% rename from src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Converters/Newtonsoft.Json/CommonNullableDateTimeOffsetConverter.cs rename to src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/CommonNullableDateTimeOffsetConverter.cs diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Converters/Newtonsoft.Json/StringTypedStringArrayConverter.cs b/src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/JsonTypedStringArrayConverter.cs similarity index 95% rename from src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Converters/Newtonsoft.Json/StringTypedStringArrayConverter.cs rename to src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/JsonTypedStringArrayConverter.cs index 44bcbfdb..911415cf 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Converters/Newtonsoft.Json/StringTypedStringArrayConverter.cs +++ b/src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/JsonTypedStringArrayConverter.cs @@ -5,7 +5,7 @@ using Newtonsoft.Json.Converters; namespace Newtonsoft.Json.Converters { - public class StringTypedStringArrayConverter : JsonConverter + public class JsonTypedStringArrayConverter : JsonConverter { public override bool CanRead { diff --git a/src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/JsonTypedStringIListConverter.cs b/src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/JsonTypedStringIListConverter.cs new file mode 100644 index 00000000..a0b6801c --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/JsonTypedStringIListConverter.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; + +namespace Newtonsoft.Json.Converters +{ + public class JsonTypedStringIListConverter : JsonConverter?> + { + private readonly JsonConverter?> _converter = new JsonTypedStringListConverter(); + + public override bool CanRead + { + get { return true; } + } + + public override bool CanWrite + { + get { return true; } + } + + public override IList? ReadJson(JsonReader reader, Type objectType, IList? existingValue, bool hasExistingValue, JsonSerializer serializer) + { + return _converter.ReadJson(reader, objectType, ConvertIListToList(existingValue), hasExistingValue, serializer); + } + + public override void WriteJson(JsonWriter writer, IList? value, JsonSerializer serializer) + { + _converter.WriteJson(writer, ConvertIListToList(value), serializer); + } + + private List? ConvertIListToList(IList? src) + { + if (src == null) + return null; + + List? dest = src as List; + if (dest != null) + return dest; + + return new List(src); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Converters/Newtonsoft.Json/StringTypedStringListConverter.cs b/src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/JsonTypedStringListConverter.cs similarity index 94% rename from src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Converters/Newtonsoft.Json/StringTypedStringListConverter.cs rename to src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/JsonTypedStringListConverter.cs index 78550102..e9b20426 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Converters/Newtonsoft.Json/StringTypedStringListConverter.cs +++ b/src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/JsonTypedStringListConverter.cs @@ -5,7 +5,7 @@ using Newtonsoft.Json.Converters; namespace Newtonsoft.Json.Converters { - public class StringTypedStringListConverter : JsonConverter?> + public class JsonTypedStringListConverter : JsonConverter?> { public override bool CanRead { diff --git a/src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/NumberTypedBooleanConverter.cs b/src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/NumberTypedBooleanConverter.cs index 4b269e90..dd23f248 100644 --- a/src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/NumberTypedBooleanConverter.cs +++ b/src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/NumberTypedBooleanConverter.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; diff --git a/src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/NumberTypedNullableBooleanConverter.cs b/src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/NumberTypedNullableBooleanConverter.cs index c7d1cc24..7430966c 100644 --- a/src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/NumberTypedNullableBooleanConverter.cs +++ b/src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/NumberTypedNullableBooleanConverter.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; diff --git a/src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/StringTypedInt32IListConverter.cs b/src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/StringTypedInt32IListConverter.cs new file mode 100644 index 00000000..b269c7c7 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/StringTypedInt32IListConverter.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; + +namespace Newtonsoft.Json.Converters +{ + public class StringTypedInt32IListConverter : JsonConverter?> + { + private readonly JsonConverter?> _converter = new StringTypedInt32ListConverter(); + + public override bool CanRead + { + get { return true; } + } + + public override bool CanWrite + { + get { return true; } + } + + public override IList? ReadJson(JsonReader reader, Type objectType, IList? existingValue, bool hasExistingValue, JsonSerializer serializer) + { + return _converter.ReadJson(reader, objectType, ConvertIListToList(existingValue), hasExistingValue, serializer); + } + + public override void WriteJson(JsonWriter writer, IList? value, JsonSerializer serializer) + { + _converter.WriteJson(writer, ConvertIListToList(value), serializer); + } + + private List? ConvertIListToList(IList? src) + { + if (src == null) + return null; + + List? dest = src as List; + if (dest != null) + return dest; + + return new List(src); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/StringTypedInt32ListConverter.cs b/src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/StringTypedInt32ListConverter.cs new file mode 100644 index 00000000..e7b670db --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/StringTypedInt32ListConverter.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; + +namespace Newtonsoft.Json.Converters +{ + public class StringTypedInt32ListConverter : JsonConverter?> + { + public override bool CanRead + { + get { return true; } + } + + public override bool CanWrite + { + get { return true; } + } + + public override List? ReadJson(JsonReader reader, Type objectType, List? existingValue, bool hasExistingValue, JsonSerializer serializer) + { + if (reader.TokenType == JsonToken.Null) + { + return null; + } + else if (reader.TokenType == JsonToken.String) + { + string? value = serializer.Deserialize(reader); + if (value == null) + return existingValue; + + try + { + return value.Split(',').Select(e => int.Parse(e.Trim())).ToList(); + } + catch (Exception ex) + { + throw new JsonReaderException(ex.Message, ex); + } + } + + throw new JsonReaderException(); + } + + public override void WriteJson(JsonWriter writer, List? value, JsonSerializer serializer) + { + if (value != null) + writer.WriteValue(string.Join(",", value)); + else + writer.WriteNull(); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Converters/Newtonsoft.Json/StringTypedStringIListConverter.cs b/src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/StringTypedStringIListConverter.cs similarity index 100% rename from src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Converters/Newtonsoft.Json/StringTypedStringIListConverter.cs rename to src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/StringTypedStringIListConverter.cs diff --git a/src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/StringTypedStringListConverter.cs b/src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/StringTypedStringListConverter.cs new file mode 100644 index 00000000..48d81e1c --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat/Converters/Newtonsoft.Json/StringTypedStringListConverter.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; + +namespace Newtonsoft.Json.Converters +{ + public class StringTypedStringListConverter : JsonConverter?> + { + public override bool CanRead + { + get { return true; } + } + + public override bool CanWrite + { + get { return true; } + } + + public override List? ReadJson(JsonReader reader, Type objectType, List? existingValue, bool hasExistingValue, JsonSerializer serializer) + { + if (reader.TokenType == JsonToken.Null) + { + return null; + } + else if (reader.TokenType == JsonToken.String) + { + string? value = serializer.Deserialize(reader); + if (value == null) + return existingValue; + + return value.Split(',').ToList(); + } + + throw new JsonReaderException(); + } + + public override void WriteJson(JsonWriter writer, List? value, JsonSerializer serializer) + { + if (value != null) + writer.WriteValue(string.Join(",", value)); + else + writer.WriteNull(); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Converters/System.Text.Json/CommonDateTimeOffsetConverter.cs b/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/CommonDateTimeOffsetConverter.cs similarity index 100% rename from src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Converters/System.Text.Json/CommonDateTimeOffsetConverter.cs rename to src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/CommonDateTimeOffsetConverter.cs diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Converters/System.Text.Json/CommonNullableDateTimeOffsetConverter.cs b/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/CommonNullableDateTimeOffsetConverter.cs similarity index 100% rename from src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Converters/System.Text.Json/CommonNullableDateTimeOffsetConverter.cs rename to src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/CommonNullableDateTimeOffsetConverter.cs diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Converters/System.Text.Json/StringTypedStringArrayConverter.cs b/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/JsonTypedStringArrayConverter.cs similarity index 94% rename from src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Converters/System.Text.Json/StringTypedStringArrayConverter.cs rename to src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/JsonTypedStringArrayConverter.cs index 9a30eaa4..4655a74b 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Converters/System.Text.Json/StringTypedStringArrayConverter.cs +++ b/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/JsonTypedStringArrayConverter.cs @@ -5,7 +5,7 @@ using System.Text.Json.Serialization; namespace System.Text.Json.Converters { - public class StringTypedStringArrayConverter : JsonConverter + public class JsonTypedStringArrayConverter : JsonConverter { public override string[]? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { diff --git a/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/JsonTypedStringIListConverter.cs b/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/JsonTypedStringIListConverter.cs new file mode 100644 index 00000000..68633d7c --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/JsonTypedStringIListConverter.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace System.Text.Json.Converters +{ + public class JsonTypedStringIListConverter : JsonConverter?> + { + private readonly JsonConverter?> _converter = new JsonTypedStringListConverter(); + + public override IList? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + return _converter.Read(ref reader, typeToConvert, options); + } + + public override void Write(Utf8JsonWriter writer, IList? value, JsonSerializerOptions options) + { + _converter.Write(writer, ConvertIListToList(value), options); + } + + private List? ConvertIListToList(IList? src) + { + if (src == null) + return null; + + List? dest = src as List; + if (dest != null) + return dest; + + return new List(src); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Converters/System.Text.Json/StringTypedStringListConverter.cs b/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/JsonTypedStringListConverter.cs similarity index 93% rename from src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Converters/System.Text.Json/StringTypedStringListConverter.cs rename to src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/JsonTypedStringListConverter.cs index cff41b92..ef17f2a7 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Converters/System.Text.Json/StringTypedStringListConverter.cs +++ b/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/JsonTypedStringListConverter.cs @@ -5,7 +5,7 @@ using System.Text.Json.Serialization; namespace System.Text.Json.Converters { - public class StringTypedStringListConverter : JsonConverter?> + public class JsonTypedStringListConverter : JsonConverter?> { public override List? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { diff --git a/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/NumberTypedBooleanConverter.cs b/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/NumberTypedBooleanConverter.cs index 0ac0a920..e989abbf 100644 --- a/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/NumberTypedBooleanConverter.cs +++ b/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/NumberTypedBooleanConverter.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Globalization; using System.Text.Json; using System.Text.Json.Serialization; diff --git a/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/NumberTypedNullableBooleanConverter.cs b/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/NumberTypedNullableBooleanConverter.cs index 9f9fa11e..57e850dd 100644 --- a/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/NumberTypedNullableBooleanConverter.cs +++ b/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/NumberTypedNullableBooleanConverter.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Globalization; using System.Text.Json; using System.Text.Json.Serialization; diff --git a/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/NumberTypedStringConverter.cs b/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/NumberTypedStringConverter.cs new file mode 100644 index 00000000..f1e33ae6 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/NumberTypedStringConverter.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace System.Text.Json.Converters +{ + public class NumberTypedStringConverter : JsonConverter + { + public override string? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + if (reader.TokenType == JsonTokenType.Null) + { + return null; + } + else if (reader.TokenType == JsonTokenType.Number) + { + if (reader.TryGetInt64(out long valueAsInt64)) + return valueAsInt64.ToString(); + else if (reader.TryGetUInt64(out ulong valueAsUInt64)) + return valueAsUInt64.ToString(); + else if (reader.TryGetDouble(out double valueAsDouble)) + return valueAsDouble.ToString(); + else + return reader.GetDecimal().ToString(); + } + else if (reader.TokenType == JsonTokenType.String) + { + return reader.GetString(); + } + + throw new JsonException(); + } + + public override void Write(Utf8JsonWriter writer, string? value, JsonSerializerOptions options) + { + if (value != null) + { + if (long.TryParse(value, out long valueAsInt64)) + writer.WriteNumberValue(valueAsInt64); + else if (ulong.TryParse(value, out ulong valueAsUInt64)) + writer.WriteNumberValue(valueAsUInt64); + else if (double.TryParse(value, out double valueAsDouble)) + writer.WriteNumberValue(valueAsDouble); + else + writer.WriteStringValue(value); + } + else + { + writer.WriteNullValue(); + } + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/StringTypedBooleanConverter.cs b/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/StringTypedBooleanConverter.cs index 50bb5eb7..6b7b5492 100644 --- a/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/StringTypedBooleanConverter.cs +++ b/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/StringTypedBooleanConverter.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Globalization; using System.Text.Json; using System.Text.Json.Serialization; diff --git a/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/StringTypedInt32IListConverter.cs b/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/StringTypedInt32IListConverter.cs new file mode 100644 index 00000000..4931aec8 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/StringTypedInt32IListConverter.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace System.Text.Json.Converters +{ + public class StringTypedInt32IListConverter : JsonConverter?> + { + private readonly JsonConverter?> _converter = new StringTypedInt32ListConverter(); + + public override IList? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + return _converter.Read(ref reader, typeToConvert, options); + } + + public override void Write(Utf8JsonWriter writer, IList? value, JsonSerializerOptions options) + { + _converter.Write(writer, ConvertIListToList(value), options); + } + + private List? ConvertIListToList(IList? src) + { + if (src == null) + return null; + + List? dest = src as List; + if (dest != null) + return dest; + + return new List(src); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/StringTypedInt32ListConverter.cs b/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/StringTypedInt32ListConverter.cs new file mode 100644 index 00000000..fb47149d --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/StringTypedInt32ListConverter.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace System.Text.Json.Converters +{ + public class StringTypedInt32ListConverter : JsonConverter?> + { + public override List? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + if (reader.TokenType == JsonTokenType.Null) + { + return null; + } + else if (reader.TokenType == JsonTokenType.String) + { + string? value = reader.GetString(); + if (value == null) + return null; + + try + { + return value.Split(',').Select(e => int.Parse(e.Trim())).ToList(); + } + catch (Exception ex) + { + throw new JsonException(ex.Message, ex); + } + } + + throw new JsonException(); + } + + public override void Write(Utf8JsonWriter writer, List? value, JsonSerializerOptions options) + { + if (value != null) + writer.WriteStringValue(string.Join(",", value)); + else + writer.WriteNullValue(); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/StringTypedNullableBooleanConverter.cs b/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/StringTypedNullableBooleanConverter.cs index 8bfb78f8..28732444 100644 --- a/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/StringTypedNullableBooleanConverter.cs +++ b/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/StringTypedNullableBooleanConverter.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Globalization; using System.Text.Json; using System.Text.Json.Serialization; diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Converters/System.Text.Json/StringTypedStringIListConverter.cs b/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/StringTypedStringIListConverter.cs similarity index 100% rename from src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Converters/System.Text.Json/StringTypedStringIListConverter.cs rename to src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/StringTypedStringIListConverter.cs diff --git a/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/StringTypedStringListConverter.cs b/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/StringTypedStringListConverter.cs new file mode 100644 index 00000000..ac928531 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat/Converters/System.Text.Json/StringTypedStringListConverter.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace System.Text.Json.Converters +{ + public class StringTypedStringListConverter : JsonConverter?> + { + public override List? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + if (reader.TokenType == JsonTokenType.Null) + { + return null; + } + else if (reader.TokenType == JsonTokenType.String) + { + string? value = reader.GetString(); + if (value == null) + return null; + + return value.Split(',').ToList(); + } + + throw new JsonException(); + } + + public override void Write(Utf8JsonWriter writer, List? value, JsonSerializerOptions options) + { + if (value != null) + writer.WriteStringValue(string.Join(",", value)); + else + writer.WriteNullValue(); + } + } +}