В вашем вопросе не указано, в какой объект вы хотите десериализоваться.Если вам все равно, быстрый и грязный способ - десериализовать этот JSON в Dictionary<string, string>
.Затем вы можете выбрать любые ключи, которые вам нужны, - они будут такими же, как в JSON.Например (я использую Json.Net здесь):
var dict = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
Console.WriteLine(dict["SearchItemList[0].Column"] + ": " + dict["SearchItemList[0].Value"]);
Это выдаст:
Account: be5a36a7-c301-44d7-8d40-85e9637b5b14
Однако я подозреваю, что вы действительно ищетеfor - вернуть данные в некую структуру классов, напоминающую «оригинальный объект», который, как я предполагаю, выглядит примерно так:
class RootObject
{
public string Office { get; set; }
public List<SearchItem> SearchItemList { get; set; }
}
class SearchItem
{
public string Column { get; set; }
public string Operation { get; set; }
public string Value { get; set; }
}
Для этого вы можете десериализовать JSON в JObject
, затем преобразуйте его оттуда в желаемый результат, используя стандартные System.Linq
методы:
JObject obj = JObject.Parse(json);
RootObject root = new RootObject
{
Office = (string)obj["Office"],
SearchItemList =
obj.Properties()
.Where(p => p.Name.StartsWith("SearchItemList["))
.Select(p =>
{
var parts = p.Name.Split(new string[] { "[", "]." }, 3, StringSplitOptions.None);
return new
{
Index = int.Parse(parts[1]),
Property = new JProperty(parts[2], p.Value)
};
})
.GroupBy(a => a.Index)
.OrderBy(g => g.Key)
.Select(g => new JObject(g.Select(a => a.Property)).ToObject<SearchItem>())
.ToList()
};
Fiddle: https://dotnetfiddle.net/nQ2D2F