committed by
GitHub
21 changed files with 152 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