Beispiel #1
0
        public void WriteInner(Utf8JsonWriter writer, IShaped value, JsonSerializerOptions options)
        {
            var reader = ReadAccessor.Create(typeof(T), AccessorMemberTypes.Properties, AccessorMemberScope.Public, out var members);

            JsonShapedDataConverter <T> .WriteInner(members, reader, writer, value, options);
        }
Beispiel #2
0
        internal static void WriteInner(AccessorMembers members, IReadAccessor reader, Utf8JsonWriter writer, IShaped value, JsonSerializerOptions options)
        {
            if (value.Body != null)
            {
                foreach (var field in value.Fields)
                {
                    if (!members.TryGetValue(field, out var member))
                    {
                        continue;
                    }

                    if (!member.CanRead)
                    {
                        continue;
                    }

                    // key:
                    var propertyName = options.PropertyNamingPolicy?.ConvertName(member.Name) ?? member.Name;
                    writer.WritePropertyName(propertyName);

                    // value (can be null):
                    reader.TryGetValue(value.Body, member.Name, out var item);
                    JsonSerializer.Serialize(writer, item, options);
                }
            }
        }