예제 #1
0
    public override void Write(Utf8JsonWriter writer, TMessage value, JsonSerializerOptions options)
    {
        // Note: This logic replicates Google.Protobuf. Should follow their lead.
        var paths        = (IList <string>)value.Descriptor.Fields[FieldMask.PathsFieldNumber].Accessor.GetValue(value);
        var firstInvalid = paths.FirstOrDefault(p => !Legacy.IsPathValid(p));

        if (firstInvalid == null)
        {
            writer.WriteStringValue(string.Join(",", paths.Select(Legacy.ToJsonName)));
        }
        else
        {
            throw new InvalidOperationException($"Invalid field mask to be converted to JSON: {firstInvalid}.");
        }
    }