Вводимая строка является результатом PHP Serialize. В следующем формате:
a:size:{key definition;value definition;(repeated per element)}
.
Значение массива может быть либо целым числом, либо строкой. Здесь мы будем предполагать, что это всегда строка. Основываясь на этих правилах, мы можем найти значение с помощью :"(\w+)";
.
string pattern = @":""(\w+)"";";
string input = @"a:3:{s:10:""modulename"";s:6:""assign"";s:10:""instanceid"";s:1:""3"";s:4:""name"";s:18:""Assignent_test_two"";}";
var originalArray = Regex.Matches(input, pattern)
.Cast<Match>()
.Select(x => x.Groups[1].Value)
.ToArray();
// -> {"modulename", "assign", "instanceid", "3", "name", "Assignent_test_two"}
Мы должны выбрать значение из этого исходного массива данных, 2 на 2, чтобы составить словарь:
var projectionToExpectedResult =
Enumerable.Range(0, originalArray.Length / 2)
.ToDictionary(i => originalArray[i * 2], j => originalArray[j * 2 + 1]);
Сериализация словаря дает ожидаемый результат:
var serilisedResult = JsonConvert.SerializeObject(projectionToExpectedResult);
// -> {"modulename":"assign","instanceid":"3","name":"Assignent_test_two"}
Если бы во входном файле было int
данных. Они будут выглядеть как i:1;s:5:"value";
. Регулярное выражение будет :"?(\w+)"?;
.
person
Drag and Drop
schedule
15.10.2018