UPDATE
看來,這個問題是固定在release 10.0.1(三月2017)。
這看起來像在Json.Net的RegexConverter
類的錯誤。該ReadJson
方法是這樣的:
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.");
}
正如你所看到的,它並不期望或檢查來自讀者一個空的道理,所以它是通過哪個拋出一個JsonSerializationException
線下降。
你可能想要report an issue鏈接回到這個SO問題。
作爲一種變通方法,您可以從RegexConverter
派生自己的轉換器,並添加檢查:
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);
}
}
當你反序列化,通過自定義轉換器的實例到DeserializeObject
方法是這樣的:
SimpleClassWithRegex obj =
JsonConvert.DeserializeObject<SimpleClassWithRegex>(json, new ImprovedRegexConverter());
Alterntatively,您可以在[JsonConverter]
屬性添加到您的Regex
類成員是這樣的:
class SimpleClassWithRegex
{
[JsonConverter(typeof(ImprovedRegexConverter))]
public Regex RegProp { get; set; }
}
小提琴:https://dotnetfiddle.net/BIqmd6
非常感謝您的解決方法。我也將考慮提交一份錯誤報告。 –