2012-02-08 116 views
1

我正在使用的API提供了JSON有效内容。响应的一部分包含一个包含命名对象数组的属性。我想我想将这部分反序列化到一个.Net列表中,问题是数组中的每个对象都有一个名称,所以我无法将它作为列表获得。将JSON命名属性反序列化为.Net对象

这里的有效载荷:

{ 
    "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做到这一点的名单,但我又难倒..

+0

@Etienne de martel,你是如何格式化JSON的,我挣扎但失败了? – Markive 2012-02-09 10:33:57

+1

像任何代码一样:只需用4个空格缩进每行(或者,更好的是,选择整个代码并按下“代码”按钮)。有关更多信息,请阅读[编辑帮助](http://stackoverflow.com/editing-help)。 – 2012-02-09 14:05:34

回答

1

这种称为“命名对象的数组”的数据结构是众所周知的,称为字典地图。 (对于.NET,请参阅this doc。)

仅对ServiceOptions属性使用Dictionary<string, YourServiceOptionObject>

边注:其实物业ServiceOptions,你可能指的结构,绝不不同于CheapestQuote物业,除了一个事实,即每个关键而不是原始值posses这是另一个嵌套的价值字典/对象。

+1

从树上看不到木头..谢谢! – Markive 2012-02-09 10:37:40