Лично я бы попытался выполнить преобразование для самого класса в свойстве getter или setter.
Но если вы действительно этого хотите, вы можете создать собственный 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[] { };
}
}
Затем вы можете украсить свойство класса следующим образом:
[JsonConverter(typeof(StringCollectionTrimmerJsonConverter))]
public IEnumerable<string> SomeValues { get; set; }
См. Различные документы по адресу: https://www.newtonsoft.com/json/help/html/JsonConverterAttributeProperty.htm