Example #1
0
    internal static void WriteMessageFields(Utf8JsonWriter writer, IMessage message, GrpcJsonSettings settings, JsonSerializerOptions options)
    {
        var fields = message.Descriptor.Fields;

        foreach (var field in fields.InFieldNumberOrder())
        {
            var accessor = field.Accessor;
            var value    = accessor.GetValue(message);
            if (!JsonConverterHelper.ShouldFormatFieldValue(message, field, value, !settings.IgnoreDefaultValues))
            {
                continue;
            }

            writer.WritePropertyName(accessor.Descriptor.JsonName);
            JsonSerializer.Serialize(writer, value, value.GetType(), options);
        }
    }
Example #2
0
    private JsonPropertyInfo CreatePropertyInfo(JsonTypeInfo typeInfo, string name, FieldDescriptor field, bool isSerializable)
    {
        var propertyInfo = typeInfo.CreateJsonPropertyInfo(
            JsonConverterHelper.GetFieldType(field),
            name);

        // Properties that don't have this flag set are only used to deserialize incoming JSON.
        if (isSerializable)
        {
            propertyInfo.ShouldSerialize = (o, v) =>
            {
                return(JsonConverterHelper.ShouldFormatFieldValue((IMessage)o, field, v, !_context.Settings.IgnoreDefaultValues));
            };
            propertyInfo.Get = (o) =>
            {
                return(field.Accessor.GetValue((IMessage)o));
            };
        }

        propertyInfo.Set = GetSetMethod(field);

        return(propertyInfo);
    }