如何将 JSONConverter 写入 <string> ICollection 元素中的 trim 空格

How to write JSONConverter to trim whitespaces from the <string> ICollection elements

我们的网站 API 收到一个字符串集合,集合项中有额外的空格。我想编写一个通用的 JSON 转换器属性,可用于为集合的每个元素提供 trim 空间。

如果JSON是这样的:

prop:["value1  ","    value2" ]

我希望在 API 将其翻译为

Prop : [ "value1", "value2"]

我正在使用 FromBody 属性将 JSON 直接转换为其实体 class。

就个人而言,我会尝试在 属性 getter 或 setter.
中对 class 本身进行转换 但是如果你真的想要,你可以创建一个自定义的 JsonConverter 来做到这一点:

public class StringCollectionTrimmerJsonConverter : JsonConverter<IEnumerable<string>>
{
    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;

    public override void WriteJson(JsonWriter writer, IEnumerable<string> value, JsonSerializer serializer)
    {
        serializer.Serialize(writer, value);
    }

    public override IEnumerable<string> ReadJson(JsonReader reader, Type objectType, IEnumerable<string> existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        IEnumerable<string> strings = null;

        if (reader.TokenType.Equals(JsonToken.StartArray))
        {
            JToken token = JToken.Load(reader);
            strings = token.ToObject<IEnumerable<string>>().Select((s) => s?.Trim());
        }

        return strings ?? new string[] { };
    }
}

然后您可以像这样装饰您的 class 属性:

[JsonConverter(typeof(StringCollectionTrimmerJsonConverter))]
public IEnumerable<string> SomeValues { get; set; }

查看各种文档:https://www.newtonsoft.com/json/help/html/JsonConverterAttributeProperty.htm