JSON.Net 解析ライブラリを使用して、次の例の json をテキスト ファイルから文字列に読み込もうとしています。
C:\temp\regeLib.json の内容
{
"Regular Expressions Library":
{
"SampleRegex":"^(?<FIELD1>\d+)_(?<FIELD2>\d+)_(?<FIELD3>[\w\&-]+)_(?<FIELD4>\w+).txt$"
}
}
試して解析するコード例:
Newtonsoft.Json.Converters.RegexConverter rConv = new Newtonsoft.Json.Converters.RegexConverter();
using (StreamReader reader = File.OpenText(libPath))
{
string foo = reader.ReadToEnd();
JObject jo = JObject.Parse(foo);//<--ERROR
//How to use RegexConverter to parse??
Newtonsoft.Json.JsonTextReader jtr = new Newtonsoft.Json.JsonTextReader(reader);
JObject test = rConv.ReadJson(jtr);//<--Not sure what parameters to provide
string sampleRegex = test.ToString();
}
コンバーターを使用する必要があるようです。上記のコードが間違っていることはわかっていますが、これが可能かどうかを説明する例が見つかりません。JSON.Netを使用してテキストファイルから文字列に正規表現トークンを読み取ることは可能ですか? どんな助けでも大歓迎です。
アップデート:
さらに遊んでみて、文字クラスをエスケープする必要があることがわかりました。以下の修正を行うと、JObject に解析し、LINQ を使用して正規表現パターンを照会することができました。
訂正内容 C:\temp\regeLib.json
{
"Regular Expressions Library":
{
"SampleRegex":"^(?<FIELD1>\\d+)_(?<FIELD2>\\d+)_(?<FIELD3>[\\w\\&-]+)_(?<FIELD4>\\w+).txt$"
}
}
修正コード
using (StreamReader reader = File.OpenText(libPath))
{
string content = reader.ReadToEnd().Trim();
JObject regexLib = JObject.Parse(content);
string sampleRegex = regexLib["Regular Expressions Library"]["SampleRegex"].ToString();
//Which then lets me do the following...
Regex rSampleRegex = new Regex(sampleRegex);
foreach (string sampleFilePath in Directory.GetFiles(dirSampleFiles, "*"))
{
filename = Path.GetFileName(sampleFilePath);
if (rSampleRegex.IsMatch(filename))
{
//Do stuff...
}
}
}
これが最善のアプローチかどうかはわかりませんが、私の場合はうまくいくようです。