Это пример части Json, которую Im пытается десериализовать, мне также нужно иметь возможность отправить аналогичный Json с помощью POST. Дело в том, что я не уверен, как я предполагаю читать все эти объекты и добавлять их в список объектов adocumentitems, а не сериализовать его в этот тип списка объектов в формате JSON.

{
"adocumentitems":{
               "0":{
                  "sdescription":"PORTÁTILES SIN FLUOROSCOPIA E INTENSIFICADOR DE IMÁGENES PRACTICADO EN HABITACION UCI RN O QUIRÓFANOS",
                  "sstandarditemidentification":"21601_03 - 21601",
                  "nunitprice":21854,
                  "ntotal":21854,
                  "nquantity":1,
                  "sgroupname":"TIPO DE INGRESO: URGENCIAS                 Fecha Ing: 2021-04-09 15:27:49             Fecha Egr: 2021-04-11 22:03:00        AUTORIZACION: 146693312"
               },
               "1":{
                  "sdescription":"RADIOGRAFIA DE TORAX P.A.O A.P.Y LATERAL DECUBITO LATERAL OBLICUAS O LATERAL CON BARIO",
                  "sstandarditemidentification":"871121_03 - 871121",
                  "nunitprice":28924,
                  "ntotal":28924,
                  "nquantity":1,
                  "sgroupname":"TIPO DE INGRESO: URGENCIAS                 Fecha Ing: 2021-04-09 15:27:49             Fecha Egr: 2021-04-11 22:03:00        AUTORIZACION: 146693312"
               },
               "2":{
                  "sdescription":"TOMOGRAFIA AXIAL COMPUTADA DE TORAX",
                  "sstandarditemidentification":"879301_03 - 879301",
                  "nunitprice":141386,
                  "ntotal":282772,
                  "nquantity":2,
                  "sgroupname":"TIPO DE INGRESO: URGENCIAS                 Fecha Ing: 2021-04-09 15:27:49             Fecha Egr: 2021-04-11 22:03:00        AUTORIZACION: 146693312"
               },
               "3":{
                  "sdescription":"CONSULTA DE PRIMERA VEZ POR ESPECIALISTA EN MEDICINA INTERNA",
                  "sstandarditemidentification":"890266_03 - 890266",
                  "nunitprice":17514,
                  "ntotal":17514,
                  "nquantity":1,
                  "sgroupname":"TIPO DE INGRESO: URGENCIAS                 Fecha Ing: 2021-04-09 15:27:49             Fecha Egr: 2021-04-11 22:03:00        AUTORIZACION: 146693312"
               },
               "4":{
                  "sdescription":"CUIDADO MANEJO INTRAHOSPITALARIO POR MEDICINA ESPECIALIZADA",
                  "sstandarditemidentification":"890602_03 - 890602",
                  "nunitprice":21133,
                  "ntotal":42266,
                  "nquantity":2,
                  "sgroupname":"TIPO DE INGRESO: URGENCIAS                 Fecha Ing: 2021-04-09 15:27:49             Fecha Egr: 2021-04-11 22:03:00        AUTORIZACION: 146693312"
               },
               "5":{
                  "sdescription":"CONSULTA DE URGENCIAS POR MEDICINA GENERAL",
                  "sstandarditemidentification":"890701_03 - 890701",
                  "nunitprice":17395,
                  "ntotal":17395,
                  "nquantity":1,
                  "sgroupname":"TIPO DE INGRESO: URGENCIAS                 Fecha Ing: 2021-04-09 15:27:49             Fecha Egr: 2021-04-11 22:03:00        AUTORIZACION: 146693312"
               },
               "6":{
                  "sdescription":"HEMOCULTIVO AEROBIO POR METODO AUTOMATICO",
                  "sstandarditemidentification":"901221_03 - 901221",
                  "nunitprice":42560,
                  "ntotal":85120,
                  "nquantity":2,
                  "sgroupname":"TIPO DE INGRESO: URGENCIAS                 Fecha Ing: 2021-04-09 15:27:49             Fecha Egr: 2021-04-11 22:03:00        AUTORIZACION: 146693312"
               },
               "7":{
                  "sdescription":"HEMOGRAMA IV [HEMOGLOBINA HEMATOCRITO RECUENTO DE ERITROCITOS-INDICES ERITROCITARIOS-LEUCOGRAMA-RECUENTO DE PLAQUETAS-INDICES PLAQUETARIOS Y MORFOLOGIA ELECTRONICA E HISTOGRAMA] METODO AUTOMATICO",
                  "sstandarditemidentification":"902210_03 - 902210",
                  "nunitprice":15421,
                  "ntotal":15421,
                  "nquantity":1,
                  "sgroupname":"TIPO DE INGRESO: URGENCIAS                 Fecha Ing: 2021-04-09 15:27:49             Fecha Egr: 2021-04-11 22:03:00        AUTORIZACION: 146693312"
               },
               "8":{
                  "sdescription":"GASES ARTERIALES EN REPOSO O EN EJERCICIO",
                  "sstandarditemidentification":"903839_03 - 903839",
                  "nunitprice":17766,
                  "ntotal":35532,
                  "nquantity":2,
                  "sgroupname":"TIPO DE INGRESO: URGENCIAS                 Fecha Ing: 2021-04-09 15:27:49             Fecha Egr: 2021-04-11 22:03:00        AUTORIZACION: 146693312"
               },
               "9":{
                  "sdescription":"HABITACION DE CUATRO CAMAS O MAS",
                  "sstandarditemidentification":"10A004_03 - S11304",
                  "nunitprice":91966,
                  "ntotal":183932,
                  "nquantity":2,
                  "sgroupname":"TIPO DE INGRESO: URGENCIAS                 Fecha Ing: 2021-04-09 15:27:49             Fecha Egr: 2021-04-11 22:03:00        AUTORIZACION: 146693312"
               },
               "10":{
                  "sdescription":"OXIGENO CATETER O CANULA NASAL X HORA",
                  "sstandarditemidentification":"S55201_03 - S55201",
                  "nunitprice":2940,
                  "ntotal":152880,
                  "nquantity":52,
                  "sgroupname":"TIPO DE INGRESO: URGENCIAS                 Fecha Ing: 2021-04-09 15:27:49             Fecha Egr: 2021-04-11 22:03:00        AUTORIZACION: 146693312"
               },
               "11":{
                  "sdescription":"ACIDO ACETIL SALICILICO  100 mg TABLETA",
                  "sstandarditemidentification":"19936296-08",
                  "nunitprice":100,
                  "ntotal":200,
                  "nquantity":2,
                  "sgroupname":"TIPO DE INGRESO: URGENCIAS                 Fecha Ing: 2021-04-09 15:27:49             Fecha Egr: 2021-04-11 22:03:00        AUTORIZACION: 146693312"
               }
}

Тип списка JSON, о котором я знаю, будет выглядеть примерно так:

{ "adocumentitems": [
  {
          "sdescription":"PORTÁTILES SIN FLUOROSCOPIA E INTENSIFICADOR DE IMÁGENES PRACTICADO EN HABITACION UCI RN O QUIRÓFANOS",
                  "sstandarditemidentification":"21601_03 - 21601",
                  "nunitprice":21854,
                  "ntotal":21854,
                  "nquantity":1,
                  "sgroupname":"TIPO DE INGRESO: URGENCIAS                 Fecha Ing: 2021-04-09 15:27:49"   
      },
   {
          "sdescription":"PORTÁTILES SIN FLUOROSCOPIA E INTENSIFICADOR DE IMÁGENES PRACTICADO EN HABITACION UCI RN O QUIRÓFANOS",
                  "sstandarditemidentification":"21601_03 - 21601",
                  "nunitprice":21854,
                  "ntotal":21854,
                  "nquantity":1,
                  "sgroupname":"TIPO DE INGRESO: URGENCIAS                 Fecha Ing: 2021-04-09 15:27:49"   
      }  ]
}

Но дело не в этом ...

Я работаю с C #, пытаюсь десериализовать и сериализовать с помощью NewtonSoft.

Сериализация объекта в Json для целей POST

var JsonData = JsonConvert.SerializeObject(adocumentitems);

Десериализация ответа json на объект при выполнении GET

 return JsonConvert.DeserializeObject<adocumentitems>(JsonGetResponse);

Буду признателен, если кто-нибудь поможет мне понять, как обрабатывать такие типы списков json.

-1
Mr.Conde 4 Май 2021 в 18:36

2 ответа

Лучший ответ

Ваша проблема в том, что ваш json поврежден, adocumentitems - это не массив / список, а словарь, вам либо нужно объявить его как таковой, либо вам нужно работать с базовыми классами josn, если вы работаете с System.Text.Json, это будет быть JsonDocument, JsonProperty и JsonElement, и вы можете сделать следующее

var document = JsonDocument.Parse(reader.ReadToEnd());

Тогда это даст вам доступ к JsonDocument.RootElement, который позволяет вам использовать TryGetProperty(propName, out var prop)

Это может выглядеть примерно так

JsonDocument.RootElement.parseDictionaryAsList("adocumentitems",v=>new aDocumentItem(v));

Где parseDictionaryAsList объявлен как

public static IEnumerable<TVal> parseDictionaryAsList<TVal>(this JsonElement json, string propName, Func<JsonElement, TVal> value)
    => json.TryGetProperty(propName, out var prop)
        ? prop.EnumerateObject().Select(v => value(v.Value))
        : Enumerable.Empty<TVal>();
0
MikeT 4 Май 2021 в 16:04

В JSON {} - это словарь, а не список <>.

Таким образом, вы должны обращаться с ним как со словарем.

В заключение: этот JSON представляет собой словарь, содержащий словарь.

1
Thomas V 4 Май 2021 в 15:46