Десериализовать именованное свойство JSON в .Net Object - PullRequest
1 голос
/ 09 февраля 2012

API, который я использую, предоставляет полезную нагрузку JSON. Часть ответа имеет свойство, которое содержит массив именованных объектов. Я думаю, что хочу десериализовать эту часть в .Net List, проблема в том, что каждому объекту в массиве предшествует имя, поэтому я не могу получить его как список.

Вот полезная нагрузка:

{
  "ShipAction": "GetQuote",
  "Status": "Success",
  "RequestDate": "2012-02-08 21:18:19",
  "Username": "tpi",
  "QuoteID": "6M15AQOrCl059x",
  "QuoteExpires": "2012-02-22 21:18:20",
  "NoServices": 8,
  "DeliveryCountry": "France",
  "CheapestQuote": {
    "SubTotal": "15.96",
    "VatTotal": "3.19",
    "TotalPrice": "19.15"
  },
  "ServiceOptions": {
    "PF_INT": {
      "OptionID": "6183545",
      "Carrier": "PF_INT",
      "ServiceName": "Euro Priority",
      "AlternateName": false,
      "ServiceID": "PF_INT",
      "SubjectToVat": "Y",
      "SubTotal": "15.96",
      "VatTotal": "3.19",
      "TotalPrice": "19.15"
    },
    "FEDEX_ECON": {
      "OptionID": "6183549",
      "Carrier": "FEDEX",
      "ServiceName": "Economy Delivery",
      "AlternateName": false,
      "ServiceID": "FEDEX_ECON",
      "SubjectToVat": "Y",
      "SubTotal": "18.56",
      "VatTotal": "3.71",
      "TotalPrice": "22.27"
    },
    "FEDEX_PRI": {
      "OptionID": "6183548",
      "Carrier": "FEDEX",
      "ServiceName": "International Express",
      "AlternateName": false,
      "ServiceID": "FEDEX_PRI",
      "SubjectToVat": "Y",
      "SubTotal": "20.07",
      "VatTotal": "4.01",
      "TotalPrice": "24.08"
    },
    "TNT_EXPRESS": {
      "OptionID": "6183550",
      "Carrier": "TNT Export",
      "ServiceName": "TNT International Express",
      "AlternateName": false,
      "ServiceID": "TNT_EXPRESS",
      "SubjectToVat": "Y",
      "SubTotal": "20.73",
      "VatTotal": "4.15",
      "TotalPrice": "24.88"
    },
    "DHL_EURO": {
      "OptionID": "6183546",
      "Carrier": "DHL",
      "ServiceName": "DHL Euro Plus",
      "AlternateName": false,
      "ServiceID": "DHL_EURO",
      "SubjectToVat": "Y",
      "SubTotal": "23.10",
      "VatTotal": "4.62",
      "TotalPrice": "27.72"
    },
    "TNT_ECONOMY": {
      "OptionID": "6183551",
      "Carrier": "TNT Export",
      "ServiceName": "TNT International Economy Express",
      "AlternateName": false,
      "ServiceID": "TNT_ECONOMY",
      "SubjectToVat": "Y",
      "SubTotal": "24.14",
      "VatTotal": "4.83",
      "TotalPrice": "28.97"
    },
    "DHL_INT": {
      "OptionID": "6183547",
      "Carrier": "DHL TD",
      "ServiceName": "Time Definite",
      "AlternateName": false,
      "ServiceID": "DHL_INT",
      "SubjectToVat": "Y",
      "SubTotal": "30.79",
      "VatTotal": "6.16",
      "TotalPrice": "36.95"
    },
    "PALLETWAYS_EURO_QUAR": {
      "OptionID": "6183552",
      "Carrier": "PALLETWAYS_EURO",
      "ServiceName": "Quarter Pallet Delivery",
      "AlternateName": false,
      "ServiceID": "PALLETWAYS_EURO_QUAR",
      "SubjectToVat": "Y",
      "SubTotal": "152.67",
      "VatTotal": "30.53",
      "TotalPrice": "183.20"
    }
  }
}

Мне нужен список «ServiceOptions». Я был бы рад использовать Json.Net для этого, но опять же я в замешательстве.

1 Ответ

1 голос
/ 09 февраля 2012

Такой «массив именованных объектов», как вы его назвали, является хорошо известной структурой данных и называется словарь или карта .(Для .NET см. этот документ .)

Просто используйте Dictionary<string, YourServiceOptionObject> для ServiceOptions свойства.

Примечание: фактически структура свойства ServiceOptions, на который вы, вероятно, ссылаетесь, ничем не отличается от свойства CheapestQuote, за исключением того факта, что каждый ключ вместо примитивного значения обладает значением, которое является другим вложенным словарем / объектом.

...