如何将 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
我们的网站 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