Мой объект JSON состоит из непротиворечивых атрибутов udid
, date
, event_id
и различных, но известных атрибутов внутри parameters
. Ниже есть два объекта:
{
"udid": "70baf33f-f011-44ee-b35a-6064b5ab468d",
"date": "2018-01-01",
"event_id": 2,
"parameters": {
"gender": "male",
"age": 13,
"country": "India"
}
},
{
"udid": "70baf33f-f011-44ee-b35a-6064b5ab468d",
"date": "2018-01-01",
"event_id": 1,
"parameters": {}
}
Такой JSON может быть представлен внутри одного объекта, если я перемещу параметры на верхнем уровне следующим образом:
public class Event
{
[Key]
public int Id { get; set; }
public string udid { get; set; }
public DateTime date { get; set; }
public int event_id { get; set;}
public string gender { get; set; }
public int age { get; set; }
public string country { get; set; }
public int stage { get; set; }
public bool win { get; set; }
public int time { get; set; }
public int income { get; set; }
public string name { get; set; }
public double price { get; set; }
public string item { get; set; }
}
Итак, как мне эффективно десериализовать это, потому что у меня около 30 миллионов таких записей? Я использую newtonsoft.json.
Edit:
В итоге я создал три объекта (вложенных Parameters
внутри EventNested
) и сплющил Event
, как советовал Лиам. Я случайно десериализовал json в EventNested, а затем переназначил его в Event, используя это громоздкое выражение LINQ:
List<EventNested> eventsNested = JsonConvert.DeserializeObject<List<EventNested>>(json);
List<Event> events = eventsNested.Select(x=> new Event {
date = x.date,
udid = x.udid,
event_id = x.event_id,
parametersAge = x.Parameters.age,
parametersCountry = x.Parameters.country,
parametersGender = x.Parameters.gender,
parametersIncome = x.Parameters.income,
parametersItem = x.Parameters.item,
parametersName = x.Parameters.name,
parametersPrice = x.Parameters.price,
parametersStage = x.Parameters.stage,
parametersTime = x.Parameters.time,
parametersWin = x.Parameters.win
} ).ToList();