using Newtonsoft.Json.Converters;
using System.Text.RegularExpressions;
public static void Main(string[] args)
var text = "{ \"Pattern\": \"[0-9]*\\t[a-z]+\" }";
var o = JsonConvert.DeserializeObject<Rule>(text);
Console.WriteLine(o.Pattern);
[JsonConverter(typeof(LooseRegexConverter))]
public string Pattern { get; set; }
public bool Test(string text)
return new Regex(Pattern).IsMatch(text);
public class LooseRegexConverter : JsonConverter
public const string SingleBackslash = @"\";
public const string DoubleBackslash = @"\\";
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
using (var stringWriter = new System.IO.StringWriter())
serializer.Serialize(stringWriter, value);
var json = stringWriter.GetStringBuilder().ToString();
writer.WriteRawValue(json.Replace(DoubleBackslash, SingleBackslash));
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
if (CanConvert(objectType))
var value = serializer.Deserialize(reader, objectType);
public override bool CanConvert(Type objectType)
return objectType.Equals(typeof(string));