CẬP NHẬT
Dường như vấn đề này đã được cố định trong release 10.0.1 (tháng 3 năm 2017).
Điều này giống như lỗi trong lớp học của Json.Net RegexConverter
. Phương pháp ReadJson
trông như thế này:
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.StartObject)
{
return ReadRegexObject(reader, serializer);
}
if (reader.TokenType == JsonToken.String)
{
return ReadRegexString(reader);
}
throw JsonSerializationException.Create(reader, "Unexpected token when reading Regex.");
}
Như bạn thấy, nó không phải là mong đợi hoặc kiểm tra cho một mã thông báo null từ người đọc, vì vậy nó được rơi qua vào dòng đó ném một JsonSerializationException
.
Bạn có thể muốn report an issue liên kết ngược lại câu hỏi SO này.
Là một khắc phục, bạn có thể lấy được chuyển đổi của riêng bạn từ RegexConverter
và thêm việc kiểm tra:
public class ImprovedRegexConverter : RegexConverter
{
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Null)
{
return null;
}
return base.ReadJson(reader, objectType, existingValue, serializer);
}
}
Khi bạn deserialize, vượt qua một thể hiện của chuyển đổi tùy chỉnh của bạn với phương pháp DeserializeObject
như thế này:
SimpleClassWithRegex obj =
JsonConvert.DeserializeObject<SimpleClassWithRegex>(json, new ImprovedRegexConverter());
Alterntatively, bạn có thể thêm một thuộc tính [JsonConverter]
-Regex
thành viên lớp học của bạn như thế này:
class SimpleClassWithRegex
{
[JsonConverter(typeof(ImprovedRegexConverter))]
public Regex RegProp { get; set; }
}
Fiddle: https://dotnetfiddle.net/BIqmd6
Cảm ơn rất nhiều vì cách giải quyết khác. Tôi cũng sẽ xem xét nộp báo cáo lỗi. –