Json.NET不與一些發揮出色.Net類型,如System.Net.IPAddress
或System.Net.Mail.MailAddress
。除非你願意修改您的JSON,那麼你就必須按順序使用它們(從here採取代碼)編寫自定義轉換器:
public class MailAddressConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var mailAddress = value as MailAddress;
writer.WriteValue(mailAddress == null? string.Empty : mailAddress.ToString());
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var text = reader.Value as string;
MailAddress mailAddress;
return IsValidMailAddress(text, out mailAddress) ? mailAddress : null;
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof(MailAddress);
}
private static bool IsValidMailAddress(string text, out MailAddress value)
{
try
{
value = new MailAddress(text);
return true;
}
catch
{
value = null;
return false;
}
}
}
然後,你可以修改你的類作爲作者的那個帖子提示:
public class Person
{
[JsonProperty(PropertyName = "id")]
public string PersonId { get; set; }
[JsonProperty(PropertyName = "firstName")]
public string PersonFirstName { get; set; }
[JsonConverter(typeof(MailAddressConverter))]
[JsonProperty(PropertyName = "email")]
public MailAddress PersonEmail { get; set; }
}
... 或,你可以使用我的首選方法,這就是使用Json.NET的JsonSerializerSettings
:
public sealed class SerializerSettings : JsonSerializerSettings
{
public SerializerSettings() : base()
{
this.Converters.Add(new MailAddressConverter());
}
}
然後在您的Main()
:
JsonConvert.DefaultSettings =() => new SerializerSettings();
你有什麼問題? Json.NET應該閉着眼睛做這件事。 – CodingYoshi
@CodingYoshi,你可以在這裏看到https://dotnetfiddle.net/XbUVci它不起作用。 – kiziu
@kiziu謝謝。你太快=) – RoLYroLLs