Десериализовать JSON с помощью автообрезки строк
Я использую библиотеку Newtonsoft.Json
Есть ли способ обрезать пробелы из любых строковых данных во время десериализации?
class Program
{
class Person
{
[JsonProperty("name")]
public string Name;
}
static void Main(string[] args)
{
var p = JsonConvert.DeserializeObject(@"{ name: "" John "" }");
Console.WriteLine("Name is: \"{0}\"", p.Name);
}
}
Добавлено:
Наконец-то я'У нас есть решение с пользовательским конвертером. Не красиво, но лучше, чем свойство с Trim ().
Если у кого-то есть идеи, как сделать это более естественным способом, пожалуйста, добро пожаловать.
class Program
{
sealed class TrimAttribute : Attribute
{ }
class TrimConverter : JsonConverter where T : new()
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var jObject = JObject.Load(reader);
var obj = new T();
serializer.Populate(jObject.CreateReader(), obj);
var props = objectType.GetFields(BindingFlags.Instance | BindingFlags.Public)
.Where(p => p.FieldType == typeof(string))
.Where(p => Attribute.GetCustomAttributes(p).Any(u => (Type) u.TypeId == typeof(TrimAttribute)))
;
foreach (var fieldInfo in props)
{
var val = (string) fieldInfo.GetValue(obj);
fieldInfo.SetValue(obj, val.Trim());
}
return obj;
}
public override bool CanConvert(Type objectType)
{
return objectType.IsAssignableFrom(typeof (T));
}
}
[JsonConverter(typeof(TrimConverter))]
class Person
{
[JsonProperty("name")]
[Trim]
public string Name;
[JsonProperty("surname")]
public string Surname;
}
static void Main(string[] args)
{
var p = JsonConvert.DeserializeObject(@"{ name: "" John "", surname: "" Smith "" }");
Console.WriteLine("Name is: \"{0}\", \"{1}\"", p.Name, p.Surname);
}
}