22 changed files with 154 additions and 45 deletions
@ -0,0 +1,49 @@ |
|||||
|
using LINGYUN.Abp.WeChat.Work.Contacts.Members.Models; |
||||
|
using Newtonsoft.Json.Linq; |
||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
|
||||
|
namespace Newtonsoft.Json; |
||||
|
|
||||
|
internal class MemberExternalAttributeConverter : JsonConverter<MemberExternalAttribute> |
||||
|
{ |
||||
|
public override MemberExternalAttribute? ReadJson(JsonReader reader, Type objectType, MemberExternalAttribute? existingValue, bool hasExistingValue, JsonSerializer serializer) |
||||
|
{ |
||||
|
var jObject = JObject.Load(reader); |
||||
|
|
||||
|
var memberExternalAttribute = new MemberExternalAttribute(); |
||||
|
|
||||
|
if (jObject.TryGetValue("attrs", out var externalAttrsToken) && externalAttrsToken.Type == JTokenType.Array) |
||||
|
{ |
||||
|
var attrs = new List<MemberAttribute>(); |
||||
|
foreach (var externalAttrToken in externalAttrsToken) |
||||
|
{ |
||||
|
var typeToken = externalAttrToken.SelectToken("type"); |
||||
|
if (typeToken != null) |
||||
|
{ |
||||
|
var attributeType = typeToken.Value<int>(); |
||||
|
if (Enum.IsDefined(typeof(AttributeType), attributeType)) |
||||
|
{ |
||||
|
attrs.Add(MemberAttributeDeserializeFactory.CreateExternalAttribute((AttributeType)attributeType, externalAttrToken)); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
memberExternalAttribute.Attributes = attrs.ToArray(); |
||||
|
} |
||||
|
|
||||
|
return memberExternalAttribute; |
||||
|
} |
||||
|
|
||||
|
public override void WriteJson(JsonWriter writer, MemberExternalAttribute? value, JsonSerializer serializer) |
||||
|
{ |
||||
|
writer.WriteStartObject(); |
||||
|
|
||||
|
if (value != null) |
||||
|
{ |
||||
|
writer.WritePropertyName("external_corp_name"); |
||||
|
serializer.Serialize(writer, value.Attributes); |
||||
|
} |
||||
|
|
||||
|
writer.WriteEndObject(); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,47 @@ |
|||||
|
using LINGYUN.Abp.WeChat.Work.Contacts.Members.Models; |
||||
|
using System.Collections.Generic; |
||||
|
|
||||
|
namespace System.Text.Json.Serialization; |
||||
|
|
||||
|
internal class MemberExternalAttributeConverter : JsonConverter<MemberExternalAttribute> |
||||
|
{ |
||||
|
public override MemberExternalAttribute? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) |
||||
|
{ |
||||
|
using var doc = JsonDocument.ParseValue(ref reader); |
||||
|
var root = doc.RootElement; |
||||
|
|
||||
|
var memberExternalAttribute = new MemberExternalAttribute(); |
||||
|
|
||||
|
if (root.TryGetProperty("attrs", out var externalAttrsElement) && externalAttrsElement.ValueKind == JsonValueKind.Array) |
||||
|
{ |
||||
|
var attrs = new List<MemberAttribute>(); |
||||
|
foreach (var externalAttrElement in externalAttrsElement.EnumerateArray()) |
||||
|
{ |
||||
|
if (externalAttrElement.TryGetProperty("type", out var typeElement) && typeElement.ValueKind != JsonValueKind.Null) |
||||
|
{ |
||||
|
var attributeType = typeElement.GetInt32(); |
||||
|
if (Enum.IsDefined(typeof(AttributeType), attributeType)) |
||||
|
{ |
||||
|
attrs.Add(MemberAttributeDeserializeFactory.CreateExternalAttribute((AttributeType)attributeType, externalAttrElement)); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
memberExternalAttribute.Attributes = attrs.ToArray(); |
||||
|
} |
||||
|
|
||||
|
return memberExternalAttribute; |
||||
|
} |
||||
|
|
||||
|
public override void Write(Utf8JsonWriter writer, MemberExternalAttribute value, JsonSerializerOptions options) |
||||
|
{ |
||||
|
writer.WriteStartObject(); |
||||
|
|
||||
|
if (value.Attributes != null) |
||||
|
{ |
||||
|
writer.WritePropertyName("attrs"); |
||||
|
JsonSerializer.Serialize(writer, value.Attributes, value.Attributes.GetType(), options); |
||||
|
} |
||||
|
|
||||
|
writer.WriteEndObject(); |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue