feat(tenpayv2): 导入项目

This commit is contained in:
RHQYZ
2022-01-20 23:20:03 +08:00
committed by GitHub
parent 47575857b6
commit 7205686f71
72 changed files with 4092 additions and 45 deletions

View File

@@ -1,5 +1,10 @@
using System;
using System.Collections.Generic;
using System.Dynamic;
using System.Linq;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Text.Json.Nodes;
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models.Platform
{
@@ -38,7 +43,8 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models.Platform
/// </summary>
[Newtonsoft.Json.JsonProperty("norm")]
[System.Text.Json.Serialization.JsonPropertyName("norm")]
public object Norm { get; set; } = default!;
[System.Text.Json.Serialization.JsonConverter(typeof(DynamicObjectConverter))]
public dynamic Norm { get; set; } = default!;
}
}
@@ -49,4 +55,110 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models.Platform
[System.Text.Json.Serialization.JsonPropertyName("result")]
public Types.Result[] ResultList { get; set; } = default!;
}
public class DynamicObjectConverter : JsonConverter<dynamic?>
{
public override bool CanConvert(Type typeToConvert)
{
return base.CanConvert(typeToConvert) || typeof(IDynamicMetaObjectProvider).IsAssignableFrom(typeToConvert);
}
public override dynamic? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
return ReadValue(ref reader, options);
}
public override void Write(Utf8JsonWriter writer, dynamic? value, JsonSerializerOptions options)
{
}
private object? ReadValue(ref Utf8JsonReader reader, JsonSerializerOptions options)
{
switch (reader.TokenType)
{
case JsonTokenType.None:
case JsonTokenType.Null:
return null;
case JsonTokenType.True:
return true;
case JsonTokenType.False:
return false;
case JsonTokenType.Number:
return reader.TryGetInt64(out long longValue) ? longValue : reader.GetDouble();
case JsonTokenType.String:
return reader.GetString();
case JsonTokenType.StartObject:
return ReadObject(ref reader, options);
case JsonTokenType.StartArray:
return ReadArray(ref reader, options);
default:
return JsonNode.Parse(ref reader, new JsonNodeOptions() { PropertyNameCaseInsensitive = options.PropertyNameCaseInsensitive });
}
}
private object? ReadObject(ref Utf8JsonReader reader, JsonSerializerOptions options)
{
IDictionary<string, object?> expandoObject = new ExpandoObject();
while (reader.Read())
{
switch (reader.TokenType)
{
case JsonTokenType.PropertyName:
{
string key = reader.GetString()!;
if (!reader.Read())
{
throw new JsonException("Unexpected end when reading ExpandoObject.");
}
object? value = ReadValue(ref reader, options);
expandoObject[key] = value;
}
break;
case JsonTokenType.Comment:
break;
case JsonTokenType.EndObject:
return expandoObject;
}
}
throw new JsonException("Unexpected end when reading ExpandoObject.");
}
private object? ReadArray(ref Utf8JsonReader reader, JsonSerializerOptions options)
{
IList<object?> list = new List<object?>();
while (reader.Read())
{
switch (reader.TokenType)
{
case JsonTokenType.Comment:
break;
case JsonTokenType.EndArray:
return list.ToArray();
default:
{
object? element = ReadValue(ref reader, options);
list.Add(element);
}
break;
}
}
throw new JsonException("Unexpected end when reading ExpandoObject.");
}
}
}