Как получить значимые значения из объекта json и работать с ними
Всем привет. Я работаю с объектом json в своем приложении c#. Я успешно десериализовал json, и то, что я хочу, - это взять только значимые свойства (свойства с фактическими значениями) из json и использовать их (на самом деле я должен обновить таблицы базы данных, используя эти свойства).
Что я уже пробовал:
Например, давайте посмотрим класс ticketsdata. Вот он:
public class TicketsData { public int id { get; set; } public string ticket_number { get; set; } public int user_id { get; set; } public int? origin_id { get; set; } public int priority_id { get; set; } public int sla_plan_id { get; set; } public int status_id { get; set; } public int? timezone_id { get; set; } public string is_auto_assigned { get; set; } public string created_at { get; set; } public string updated_at { get; set; } public int? created_by { get; set; } public string closed_at { get; set; } public string subject { get; set; } public string first_assigned_agent_or_team { get; set; } public string last_assigned_agent_or_team { get; set; } public string service_fulfill { get; set; } public int? no_of_workflow_positions { get; set; } public double? invoice_amount { get; set; } public object invoiceDetails { get; set; } }
Часть json, связанная с "TicketsData":
ticketsData
5
updated_at "2018-09-20 14:21:40"
29 {…}
Я использую отражение в своем коде:
public void UpdateEntriesFrom_tbl_ts_TicketsData(Dictionary<int, TicketsData> ticketsData) { foreach (KeyValuePair<int, TicketsData> entry in ticketsData) { Type t = entry.Value.GetType(); PropertyInfo[] props = t.GetProperties(); Dictionary<string, object> dict = new Dictionary<string, object>(); foreach (PropertyInfo prp in props) { object value = prp.GetValue(entry.Value, new object[] { }); dict.Add(prp.Name, value); } foreach (var item in dict) { if (item.Value != null) { UpdateEntry("tbl_ts_TicketsData", item.Key, item.Value, entry.Key); } } } }
Передо мной стоят две проблемы. Первая проблема заключается в том, что отражение получает все свойства класса "TicketsData", включая "id", а мне нужны все свойства без "id". Вторая проблема заключается в том, что если я использую приведенный выше код, я делаю проверку:
if (item.Value != null) { UpdateEntry("tbl_ts_TicketsData", item.Key, item.Value, entry.Key); }
но в моей таблице БД "tbl_ts_TicketsData" есть такие поля, как "user_id", которые являются (int, а не null), и когда json соответствует приведенному выше фрагменту кода, "user_id" поставляется со значением по умолчанию "0", проходит проверку
if (item.Value != null)
и запускает метод обновления, который не является тем, что я хочу (я хочу использовать только значимые поля из json). Я попробовал другой подход без размышлений, как это:
foreach (KeyValuePair<int, TicketsData> entry in ticketsData) { if (entry.Value.user_id != 0) { UpdateEntry("tbl_ts_TicketsData", "user_id", entry.Value.user_id, entry.Key); } }
но проблема с этим подходом заключается в том, что "0" является допустимой цифрой для столбца "id" таблицы "User", и я могу пропустить случай, если использую приведенный выше код.
Можете ли вы помочь мне получить только значимые свойства (свойства с реальными, а не дефалютными значениями) из десериализованного json, чтобы я мог их использовать?
Richard MacCutchan
Как же так? Только вы можете решить, что является значимой ценностью.
Graeme_Grant
Проблема, которая у вас есть, не связана с десериализацией JSON, она связана с вашей логикой хранения БД.
Если вы собираетесь использовать отражение, почему бы не использовать Entity Framework? Они решили проблемы, которые вы испытываете.