Member 13992723 Ответов: 0

Как получить значимые значения из объекта 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? Они решили проблемы, которые вы испытываете.

0 Ответов