2015-05-14 236 views
0

我想要做這樣的事情......有效JSON,但無法反序列化

Dictionary<string, string> values = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(jsonstring); 

和我有類似下面有效的數據,但它不會正確反序列化。有人能告訴我我做錯了什麼嗎?

[ 
    { 
     "Shop": "101", 
     "Table": "hro", 
     "ROWGuid": "031a0762-8d50-4d7c-9da9-9a233962733e", 
     "JSONData": [ 
      { 
       "BOXFER": false, 
       "RO_NO": "0423684", 
       "CUST_NO": "9902215", 
       "VEH_NO": " 40174", 
       "FLEET_NO": "", 
       "BILLTO": "", 
       "STATUS": "C", 
       "RODATE": "2015-05-02T00:00:00", 
       "TAX_PARTS": 26.94, 
       "NTX_PARTS": 0, 
       "TAX_LABOR": 16.92, 
       "NTX_LABOR": 0, 
       "TAX_SUBLET": 0, 
       "NTX_SUBLET": 0, 
       "DISCOUNTS": null, 
       "TAX": 1.66, 
       "SUPPLIES": 0.95, 
       "CRD_CRG": 0, 
       "CASH": 24.6, 
       "CHECK": 0, 
       "CREDIT_CRD": 0, 
       "CHARGE": 0, 
       "PAY_DATE": "2015-05-02T00:00:00", 
       "TOTAL": 24.6, 
       "DISP": 0, 
       "DISL": 0, 
       "DISS": 0, 
       "DISPT": "Y", 
       "DISLT": "Y", 
       "DISST": "Y", 
       "OK": null, 
       "BAD": null, 
       "RECOMENDS": null, 
       "COMMENTS": null, 
       "T_COST": 0, 
       "P_COST": 7.89, 
       "CHANGED": "0", 
       "MILAGE": "117317", 
       "ZIP": null, 
       "CENTER": null, 
       "CARD": 0, 
       "ST": 0, 
       "SOURCE": null, 
       "BNAME": "BBS, DAVID/LIZ", 
       "AC1": "734", 
       "PHONE1": "877-3520", 
       "YEAR": "1999", 
       "MAKE": "LEXU", 
       "MODEL": "ES 330", 
       "LICENSE": "8Kff47", 
       "PO_NUM": "", 
       "CHECK_NO": "", 
       "ADVANCE": 0, 
       "POSTED": "Y", 
       "WRITER": "006", 
       "REOPENED": null, 
       "SHIPTO_NO": "", 
       "CreditCardNo": "", 
       "CreditCardAuth": "", 
       "CreditCardExp": null, 
       "CheckAuth": "", 
       "GSTTAX_PARTS": 0, 
       "GSTTAX_LABOR": 0, 
       "GSTTAX_SUBLET": 0, 
       "GSTTAX": 0, 
       "CONCERNS": "", 
       "INSPECTIONS": "NNNNNN", 
       "ARRIVED": "2015-05-02T13:30:00", 
       "PROMISED": null, 
       "CLOSED": "2015-05-02T17:35:14", 
       "WAITING": false, 
       "Hours": 0.68, 
       "Coupon": null, 
       "FleetDiscount": 0, 
       "ORIG_NO": "0197494", 
       "LockSupplies": false, 
       "LockDiscounts": false, 
       "DISPGST": " ", 
       "DISLGST": " ", 
       "DISSGST": " ", 
       "TireTax": 0, 
       "FET": 0, 
       "TAXID": null, 
       "FTInvoiceID": null, 
       "FTPIN": null, 
       "FTPaymentType": null, 
       "ChangeWarningNeeded": 0, 
       "DHPosted": false, 
       "PRIMARYTECH": "391", 
       "FTNotes": null, 
       "FTLaborRate": 0, 
       "Signature": null, 
       "row_GUID": "031a0762-8d50-4d7c-9da9-9a2bf962733e", 
       "VoidedByUser": false, 
       "pdTaxableParts": -13.43, 
       "pdNonTaxParts": 0, 
       "pdTaxableLabor": -8.44, 
       "pdNonTaxLabor": 0, 
       "coupTaxableParts": 0, 
       "coupNonTaxParts": 0, 
       "coupTaxableLabor": 0, 
       "coupNonTaxLabor": 0, 
       "coupTaxableSublet": 0, 
       "coupNonTaxSublet": 0, 
       "MileageIn": "117317", 
       "FLEETCARD": null, 
       "FTAuthorization": null, 
       "FTFleetID": null, 
       "WorkOrder": null, 
       "FTPosted": false, 
       "FTTotalAuthorized": null, 
       "OriginatorType": null, 
       "OriginatorVersion": null, 
       "PAYTYPE_GUID": null, 
       "PAYTYPERELATION_GUID": null, 
       "ePaySignatureId": null, 
       "CREATED": "2015-05-02T13:30:09" 
      } 
     ], 
     "Action": "add" 
    }, 
    { 
     "Shop": "101", 
     "Table": "hro", 
     "ROWGuid": "0dbbbd64-c85a-46a1-bf7d-df02d4467919", 
     "JSONData": [ 
      { 
       "BOXFER": false, 
       "RO_NO": "0423656", 
       "CUST_NO": "9904557", 
       "VEH_NO": " 45152", 
       "FLEET_NO": "", 
       "BILLTO": "", 
       "STATUS": "C", 
       "RODATE": "2015-05-01T00:00:00", 
       "TAX_PARTS": 30.93, 
       "NTX_PARTS": 0, 
       "TAX_LABOR": 28.2, 
       "NTX_LABOR": 0, 
       "TAX_SUBLET": 0, 
       "NTX_SUBLET": 0, 
       "DISCOUNTS": null, 
       "TAX": 1.59, 
       "SUPPLIES": 0, 
       "CRD_CRG": 0, 
       "CASH": 0, 
       "CHECK": 0, 
       "CREDIT_CRD": 23.58, 
       "CHARGE": 0, 
       "PAY_DATE": "2015-05-01T00:00:00", 
       "TOTAL": 23.58, 
       "DISP": 0, 
       "DISL": 0, 
       "DISS": 0, 
       "DISPT": "Y", 
       "DISLT": "Y", 
       "DISST": "Y", 
       "OK": null, 
       "BAD": null, 
       "RECOMENDS": null, 
       "COMMENTS": null, 
       "T_COST": 0, 
       "P_COST": 9.24, 
       "CHANGED": "0", 
       "MILAGE": "115283", 
       "ZIP": null, 
       "CENTER": null, 
       "CARD": 1, 
       "ST": 0, 
       "SOURCE": null, 
       "BNAME": "SCIGE, RICHARD", 
       "AC1": "734", 
       "PHONE1": "847-6911", 
       "YEAR": "1997", 
       "MAKE": "FORT", 
       "MODEL": "ESCAPE", 
       "LICENSE": "6J8969", 
       "PO_NUM": "", 
       "CHECK_NO": "", 
       "ADVANCE": 0, 
       "POSTED": "Y", 
       "WRITER": "006", 
       "REOPENED": null, 
       "SHIPTO_NO": "", 
       "CreditCardNo": "7539", 
       "CreditCardAuth": "07810z", 
       "CreditCardExp": null, 
       "CheckAuth": "", 
       "GSTTAX_PARTS": 0, 
       "GSTTAX_LABOR": 0, 
       "GSTTAX_SUBLET": 0, 
       "GSTTAX": 0, 
       "CONCERNS": "oil change rotate air tires to 40", 
       "INSPECTIONS": "NNNNNN", 
       "ARRIVED": "2015-05-01T13:15:00", 
       "PROMISED": null, 
       "CLOSED": "2015-05-01T13:49:50", 
       "WAITING": false, 
       "Hours": 0.8, 
       "Coupon": null, 
       "FleetDiscount": 0, 
       "ORIG_NO": "0197460", 
       "LockSupplies": false, 
       "LockDiscounts": false, 
       "DISPGST": " ", 
       "DISLGST": " ", 
       "DISSGST": " ", 
       "TireTax": 0, 
       "FET": 0, 
       "TAXID": null, 
       "FTInvoiceID": null, 
       "FTPIN": null, 
       "FTPaymentType": null, 
       "ChangeWarningNeeded": 0, 
       "DHPosted": false, 
       "PRIMARYTECH": "391", 
       "FTNotes": null, 
       "FTLaborRate": 0, 
       "Signature": null, 
       "row_GUID": "0dbaad64-c85a-46a1-bf7d-df02d5567919", 
       "VoidedByUser": false, 
       "pdTaxableParts": -19.43, 
       "pdNonTaxParts": 0, 
       "pdTaxableLabor": -17.71, 
       "pdNonTaxLabor": 0, 
       "coupTaxableParts": 0, 
       "coupNonTaxParts": 0, 
       "coupTaxableLabor": 0, 
       "coupNonTaxLabor": 0, 
       "coupTaxableSublet": 0, 
       "coupNonTaxSublet": 0, 
       "MileageIn": "115283", 
       "FLEETCARD": null, 
       "FTAuthorization": null, 
       "FTFleetID": null, 
       "WorkOrder": null, 
       "FTPosted": false, 
       "FTTotalAuthorized": null, 
       "OriginatorType": null, 
       "OriginatorVersion": null, 
       "PAYTYPE_GUID": "a39d4372-a764-468c-bbcf-feae15fa9afd", 
       "PAYTYPERELATION_GUID": "bb801921-c227-4bbd-80e4-49d7ea60fda0", 
       "ePaySignatureId": null, 
       "CREATED": "2015-05-01T13:15:51" 
      } 
     ], 
     "Action": "add" 
    } 
] 
+1

您的JSON是有效的,所以用JSON字符串沒有任何問題,請留言錯誤/異常日誌以獲取更多幫助 – Vihar

+0

反序列化的確切代碼行是什麼?另外,發佈有關例外的更多信息。你也可能會忽略這個事實,即這是一個json數組而不是一個json對象。 – imlokesh

+0

這將產生一個JArray,而不是一個字典。在'values'上使用'var'或'JArray'作爲類型。 – Crowcoder

回答

1

反序列化爲JArray或動態而非字典。

您還可以生成這裏自定義實體:http://json2csharp.com/

+0

謝謝 - 有沒有一種乾淨的方式在JArray中迭代一次(無需將其轉換爲「對象」),因爲這是隨時完成的 - 我可能會得到不同的「JSONData」作爲返回的一部分。 –

+0

如果返回的JSON可能不同。在將其轉換爲實際類型之前,我會首先將其反序列化爲一個通用接口(或動態)。 –

0

您可以使用指定的類類型或使用動態,而不是和反序列化到該類型的列表:

var values = Newtonsoft.Json.JsonConvert.DeserializeObject<List<dynamic>>(myJson); 

這裏我用動態的列表,你可以用一個特定的替代動態對象類型,如果你願意。然後,我可以迭代項目:

foreach (var item in values) 
    { 
     //do something 
    } 
0

這是非常簡單和容易:

PSB:

var parsed = JsonConvert.DeserializeObject<JArray>(json);