Как написать JSONConverter для обрезки пробелов из элементов <string>ICollection - PullRequest
0 голосов
/ 27 сентября 2019

Наш веб-API получает коллекцию строк с дополнительными пробелами в элементах коллекции.Я хочу написать общий атрибут JSON Converter, который можно использовать для обрезки пробелов для каждого элемента коллекции.

Если JSON выглядит следующим образом:

prop:["value1  ","    value2" ]

Я хочу перевести этов API как

Prop : [ "value1", "value2"]

Я использую атрибут FromBody для перевода JSON непосредственно в его класс сущности.

1 Ответ

3 голосов
/ 27 сентября 2019

Лично я бы попытался выполнить преобразование для самого класса в свойстве 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

...