Ответ 1
У вас есть два варианта:
- Преобразовать string.Empty в null в поле E-mail. Много раз это вполне приемлемо. Вы можете сделать эту работу глобально или просто сделать ваш сеттер преобразовать string.Empty в null в поле электронной почты.
- Напишите собственный атрибут EmailAddress, поскольку атрибут EmailAddressAttribute запечатан, вы можете его обернуть и написать собственный метод IsValid пересылки.
Пример:
bool IsValid(object value)
{
if (value == string.Empty)
{
return true;
}
else
{
return _wrappedAttribute.IsValid(value);
}
}
Расширение по опции 1 (из Web Api не конвертирует значения пустых строк json в null)
Добавьте этот конвертер:
public class EmptyToNullConverter : JsonConverter
{
private JsonSerializer _stringSerializer = new JsonSerializer();
public override bool CanConvert(Type objectType)
{
return objectType == typeof(string);
}
public override object ReadJson(JsonReader reader, Type objectType,
object existingValue, JsonSerializer serializer)
{
string value = _stringSerializer.Deserialize<string>(reader);
if (string.IsNullOrEmpty(value))
{
value = null;
}
return value;
}
public override void WriteJson(JsonWriter writer, object value,
JsonSerializer serializer)
{
_stringSerializer.Serialize(writer, value);
}
}
и использовать свойство:
[JsonConverter(typeof(EmptyToNullConverter))]
public string EmailAddress {get; set; }
или глобально в WebApiConfig.cs:
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(
new EmptyToNullConverter());