Десериализация JSON из объекта OdooRP C в C# - PullRequest
0 голосов
/ 07 марта 2020

У меня проблемы с анализом json объекта с использованием десериализатора json. net. Мои объекты:

        public class Employee
        {
            public int id { get; set; }
            public string name { get; set; }
            public string work_email { get; set; }
            public Partner address_id { get; set; }
        }

        public class Partner
        {
            public int id { get; set; } //in the example "5021"
            public string name { get; set; } //in the example "company x"
        }

JSON:

{
  "address_id": [
    5021,
    "Company X"
  ],
  "work_email": false,
  "id": 37,
  "name": "John Doe"
}

Ошибка, которую я понимаю: текущий массив JSON (например, [1,2,3]) не может преобразуйте в 'Odoo.OdooConnect + Partner', поскольку для корректного десериализации типа требуется объект JSON (например, {"name": "value"}).

Изменение json на "address_id": {5021, "Компания X"}, конечно, исправит ошибку, но это невозможно.

Я не могу представить, что нет лучшего варианта, чем использовать списки и вручную преобразовывать все многоуровневые ключи в свойства, подобные этим:

if (records.Property("address_id") != null) { Employee.Partner.id = (int)records.SelectToken( "address_id[0]" ); Employee.Partner.name = (int)records.SelectToken( "address_id[1]" ); }

Некоторая помощь?

1 Ответ

0 голосов
/ 07 марта 2020

Решено добавлением этого помощника для разбора json. Если число «массив» <2, в моем случае ложь, я просто не добавляю токен к объекту задания. </p>

            JObject newJSON = new JObject();
            foreach (KeyValuePair<string, JToken> token in JSON)
            {
                string _keyname = token.Key;
                JToken _value = token.Value;
                if (!token.Key.Contains("_id"))
                {
                    newJSON.Add(_keyname, _value);
                }
                else if (token.Value.Count() < 2)
                {
                    //do nothing
                }
                else
                {
                    newJSON.Add(_keyname, _value.First);
                    newJSON.Add(_keyname + "_name", _value.Last);

                }
            }
            return newJSON;}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...