.net C#中的序列化和非序列化HttpClient负载

pdtvr36n  于 2023-11-20  发布在  .NET
关注(0)|答案(1)|浏览(132)

我必须使用System.Net.Http.HttpClient从API中检索一些冗长的JSON数据。为了将这些数据正确地转换为所需的格式,我必须删除属性名称(而不是值)中的白色空格和特殊字符(如重音和下划线),然后删除所需格式中不存在的“属性名称”:“属性值”对。如何才能实现这一点?
我试过这样的方法,但没有效果:

  1. string apiResponse = await response.Content.ReadAsStringAsync();
  2. var jsonSerializerSettings = new JsonSerializerSettings
  3. {
  4. ContractResolver = new CamelCasePropertyNamesContractResolver()
  5. };
  6. var interimObject = JsonConvert.DeserializeObject<ExpandoObject>(apiResponse);
  7. var myJsonOutput = JsonConvert.SerializeObject(interimObject, jsonSerializerSettings);
  8. var responseData = JsonConvert.DeserializeObject<APILindeResponseWrapper<PatientData>>(myJsonOutput);

字符串
特别是,白色空格被删除了。我的APILDeResponseWrapper是:

  1. {
  2. public class APILindeResponseWrapper<T>
  3. {
  4. public string Status { get; set; }
  5. public List<DataWrapper<T>> Data { get; set; }
  6. public string Message;
  7. }
  8. public partial class DataWrapper<T>
  9. {
  10. public Timestamp Timestamp { get; set; }
  11. public T Data;
  12. }
  13. public partial class Timestamp
  14. {
  15. public string Type;
  16. public string[] Data;
  17. }
  18. }


我的患者数据是:

  1. public class PatientData
  2. {
  3. public PatientData() { }
  4. [Required(ErrorMessage = "{0} Must Be Filled")]
  5. public string? No { get; set; }
  6. [Required(ErrorMessage = "{0} Must Be Filled")]
  7. public string? Nome { get; set; }
  8. [Required(ErrorMessage = "{0} Must Be Filled")]
  9. public string? FirstName { get; set; }
  10. [Required(ErrorMessage = "{0} Must Be Filled")]
  11. public string? Surname { get; set; }
  12. public string? CittaNascita { get; set; }
  13. public DateTime? DataDiNascita { get; set; }
  14. [Required(ErrorMessage = "{0} Must Be Filled")]
  15. public int? Sesso { get; set; }
  16. public string? CodiceFiscale { get; set; }
  17. [Required(ErrorMessage = "{0} Must Be Filled")]
  18. public string? Indirizzo { get; set; }
  19. public string? Frazione { get; set; }
  20. [Required(ErrorMessage = "{0} Must Be Filled")]
  21. public string? CAP { get; set; }
  22. [Required(ErrorMessage = "{0} Must Be Filled")]
  23. public string? Città { get; set; }
  24. [Required(ErrorMessage = "{0} Must Be Filled")]
  25. public string? Provincia { get; set; }
  26. public string? TelefonoDiConsegna { get; set; }
  27. public string? IndirizzoResidenza { get; set; }
  28. public string? CAPResidenza { get; set; }
  29. public string? CittaResidenza { get; set; }
  30. public string? ProvinciaResidenza { get; set; }
  31. [Required(ErrorMessage = "{0} Must Be Filled")]
  32. public string? ShortDim5 { get; set; }
  33. public DateTime? DataAutorizzazione { get; set; }
  34. public DateTime? DataScadenza { get; set; }
  35. [Required(ErrorMessage = "{0} Must Be Filled")]
  36. public string? CustomerNo { get; set; }
  37. [Required(ErrorMessage = "{0} Must Be Filled")]
  38. public string? ShortDim4 { get; set; }
  39. [Required(ErrorMessage = "{0} Must Be Filled")]
  40. public string? StatoDelServizio { get; set; }
  41. [Required(ErrorMessage = "{0} Must Be Filled")]
  42. public string? ContractNo { get; set; }
  43. public DateTime? DataDiInstallazione { get; set; }
  44. public string? Medico { get; set; }
  45. }


来自postman的API响应示例如下:

  1. {
  2. "status": 200,
  3. "data": [
  4. {
  5. "timestamp": {
  6. "type": "Buffer",
  7. "data": [
  8. 0,
  9. 0,
  10. 0,
  11. 1,
  12. 179,
  13. 245,
  14. 49,
  15. 202
  16. ]
  17. },
  18. "Customer No_": "M037984",
  19. "Name": "ASST PAVIA",
  20. "No_": "P260339",
  21. "Codice Ricerca": "COMASCHI ROMOLO 19300523",
  22. "Nome": "COMASCHI ROMOLO",
  23. "Nome2": "",
  24. "Data di Nascita": "1930-05-23T00:00:00.000Z",
  25. "Luogo di Nascita": "",
  26. "Sesso": 1,
  27. "Codice Fiscale": "CMSRML30E23M119E",
  28. "Indirizzo": "CASA TORREGGIANI 8",
  29. "Città": "MONTECALVO VERSIGGIA",
  30. "CAP": "27047",
  31. "Provincia": "PV",
  32. "Cod_ Regione": "LOM",
  33. "Codice Paese": "IT",
  34. "Global Dimension 1 Code": "DOM221000",
  35. "Global Dimension 2 Code": "DOM202",
  36. "Contract No_": "CNT037453",
  37. "Address 2": "",
  38. "Ultimo Stato": "2019-05-08T00:00:00.000Z",
  39. "Stato del Servizio": "D",
  40. "Sospesa Fatturazione": 1,
  41. "Sospeso Servizio": 1,
  42. "Gita": "",
  43. "Giro": 0,
  44. "A Giro": 0,
  45. "Cadenza": 0,
  46. "Tipo Consegna": "",
  47. "Data Ultimo Aggior_ Consegna": "1753-01-01T00:00:00.000Z",
  48. "Prossima Consegna Prevista": "1753-01-01T00:00:00.000Z",
  49. "Time Slot": "",
  50. "Indirizzo di Consegna": "CASA TORREGGIANI 8",
  51. "CAP di Consegna": "27047",
  52. "Comune di Consegna": "MONTECALVO VERSIGGIA",
  53. "Provincia di Consegna": "PV",
  54. "Cod_ Regione di Consegna": "LOM",
  55. "Telefono di Consegna": "3403604306",
  56. "Piano": "",
  57. "NrInterno": "",
  58. "Ascensore": 0,
  59. "Data Ultima Modifica": "2019-05-09T00:00:00.000Z",
  60. "Flusso Prescritto": 0,
  61. "Oredie": 0,
  62. "Flusso Reale": 0,
  63. "Tipo di Fornitura": 0,
  64. "Prodotto": "",
  65. "Apparecchiatura": "",
  66. "Posizione Sanitaria": "",
  67. "Somministrazione": "",
  68. "Data di Installazione": "2019-04-17T00:00:00.000Z",
  69. "Data di Ritiro": "1753-01-01T00:00:00.000Z",
  70. "Data Ultima Consegna": "1753-01-01T00:00:00.000Z",
  71. "Medico": "SPRT",
  72. "ASL": "",
  73. "Distretto": "",
  74. "Data Autorizzazione": "1753-01-01T00:00:00.000Z",
  75. "Data Scadenza": "1753-01-01T00:00:00.000Z",
  76. "Protocollo": "",
  77. "Autorizzazione": "",
  78. "Ricetta": "",
  79. "Altro": "",
  80. "Numerazione": "",
  81. "Bloccato": 0,
  82. "ID_Utente": "LINDE\\IT00F4",
  83. "Flusso Strumenti": 0,
  84. "Flusso Ossigeno": 0,
  85. "Parente stretto": "",
  86. "MedicoImport": "",
  87. "ProdottoImport": "",
  88. "Diagnosi": "",
  89. "SospesoImport": "",
  90. "StrumentoImport": "",
  91. "DescrStrumento": "",
  92. "FRI": 0,
  93. "ORI": 0,
  94. "Informazioni Ambientali": "",
  95. "Unità Operativa": "",
  96. "Flusso Accessori": 0,
  97. "ASLN": "",
  98. "DistrettoN": "",
  99. "Totale Sospeso": 0,
  100. "Tot Sospeso FT": 0,
  101. "Dotazione": 0,
  102. "Usa Consumo Reale": 0,
  103. "Conta": 0,
  104. "Nr_ Farmacia": "",
  105. "Tipo Ventilazione": 0,
  106. "Tipo di Servizio": 0,
  107. "Tipologia": 1,
  108. "Erma": 0,
  109. "Ult_ Cons_ POT": "1753-01-01T00:00:00.000Z",
  110. "Note Palmare": "",
  111. "Provenienza": "",
  112. "ShortDim3": "ASL",
  113. "ShortDim4": "020400",
  114. "ShortDim5": "GOX",
  115. "ShortDim6": "010909000",
  116. "ShortDim9": "",
  117. "ShortDim10": "P260339",
  118. "Shortdim12": "CA",
  119. "Frazione": "",
  120. "Zona": "",
  121. "Venditore": "",
  122. "Filiale": "",
  123. "Agente": "",
  124. "ASLOLD": "",
  125. "DistrettoOLD": "",
  126. "SomministrazioneOld": "",
  127. "MedicoOLD": "",
  128. "CatPAZOLD": "",
  129. "StrumentoOLD": "",
  130. "Sync Date Modified": "2019-05-09T09:21:44.473Z",
  131. "First Name": "ROMOLO",
  132. "Middle Name": "",
  133. "Surname": "COMASCHI",
  134. "Initials": "",
  135. "Installation Module": 0,
  136. "ASL Code": "",
  137. "Città Nascita": "",
  138. "CAP Nascita": "",
  139. "E-mail": "",
  140. "Data ultima assistenza": "1753-01-01T00:00:00.000Z",
  141. "Patient Type": 1,
  142. "STP Code": "",
  143. "CAP Iscr_ Sanitaria": "",
  144. "City Iscr_ Sanitaria": "",
  145. "Indirizzo Residenza": "CASA TORREGGIANI 8",
  146. "Città Residenza": "MONTECALVO VERSIGGIA",
  147. "CAP Residenza": "27047",
  148. "Provincia Residenza": "PV",
  149. "Cod_ Regione Residenza": "LOM",
  150. "Codice Paese Residenza": "IT",
  151. "Standard Next Deliv_ Date": 0,
  152. "User Filter Dim_ 1": "DOM221000",
  153. "Patient Id": "",
  154. "Patient Profile Code": "",
  155. "Istat Code": "018096",
  156. "Patologia": "",
  157. "RecID": {
  158. "type": "Buffer",
  159. "data": [
  160. 96,
  161. 234,
  162. 0,
  163. 0,
  164. 2,
  165. 123,
  166. 255,
  167. 80,
  168. 0,
  169. 50,
  170. 0,
  171. 54,
  172. 0,
  173. 48,
  174. 0,
  175. 51,
  176. 0,
  177. 51,
  178. 0,
  179. 57,
  180. 0,
  181. 0,
  182. 0,
  183. 0,
  184. 0
  185. ]
  186. },
  187. "Range Of Supports Code": "",
  188. "Service Starting Date": "1753-01-01T00:00:00.000Z",
  189. "Service Expiration Date": "1753-01-01T00:00:00.000Z",
  190. "Service Item No_": "",
  191. "Service Order No_": "",
  192. "RecGUID": "197FA2DE-7410-45CF-B36B-53E808D37497",
  193. "Delivery Type": ""
  194. },
  195. {
  196. "timestamp": {
  197. "type": "Buffer",
  198. "data": [
  199. 0,
  200. 0,
  201. 0,
  202. 1,
  203. 180,
  204. 115,
  205. 47,
  206. 230
  207. ]
  208. },
  209. "Customer No_": "M037984",
  210. "Name": "ASST PAVIA",
  211. "No_": "P260347",
  212. "Codice Ricerca": "MERALDI LUIGI 19310523",
  213. "Nome": "MERALDI LUIGI",
  214. "Nome2": "",
  215. "Data di Nascita": "1931-05-23T00:00:00.000Z",
  216. "Luogo di Nascita": "",
  217. "Sesso": 1,
  218. "Codice Fiscale": "MRLLGU31E23I968J",
  219. "Indirizzo": "VIA CARDUCCI 16C",
  220. "Città": "PORTALBERA",
  221. "CAP": "27040",
  222. "Provincia": "PV",
  223. "Cod_ Regione": "LOM",
  224. "Codice Paese": "IT",
  225. "Global Dimension 1 Code": "DOM221000",
  226. "Global Dimension 2 Code": "DOM202",
  227. "Contract No_": "CNT037453",
  228. "Address 2": "",
  229. "Ultimo Stato": "2019-05-13T00:00:00.000Z",
  230. "Stato del Servizio": "SOS",
  231. "Sospesa Fatturazione": 1,
  232. "Sospeso Servizio": 1,
  233. "Gita": "",
  234. "Giro": 0,
  235. "A Giro": 0,
  236. "Cadenza": 0,
  237. "Tipo Consegna": "",
  238. "Data Ultimo Aggior_ Consegna": "1753-01-01T00:00:00.000Z",
  239. "Prossima Consegna Prevista": "1753-01-01T00:00:00.000Z",
  240. "Time Slot": "",
  241. "Indirizzo di Consegna": "VIA CARDUCCI 16C",
  242. "CAP di Consegna": "27040",
  243. "Comune di Consegna": "PORTALBERA",
  244. "Provincia di Consegna": "PV",
  245. "Cod_ Regione di Consegna": "LOM",
  246. "Telefono di Consegna": "3351028031",
  247. "Piano": "",
  248. "NrInterno": "",
  249. "Ascensore": 0,
  250. "Data Ultima Modifica": "2019-05-08T00:00:00.000Z",
  251. "Flusso Prescritto": 0,
  252. "Oredie": 0,
  253. "Flusso Reale": 0,
  254. "Tipo di Fornitura": 0,
  255. "Prodotto": "",
  256. "Apparecchiatura": "",
  257. "Posizione Sanitaria": "",
  258. "Somministrazione": "",
  259. "Data di Installazione": "2019-05-13T00:00:00.000Z",
  260. "Data di Ritiro": "1753-01-01T00:00:00.000Z",
  261. "Data Ultima Consegna": "1753-01-01T00:00:00.000Z",
  262. "Medico": "SPRT",
  263. "ASL": "",
  264. "Distretto": "",
  265. "Data Autorizzazione": "1753-01-01T00:00:00.000Z",
  266. "Data Scadenza": "1753-01-01T00:00:00.000Z",
  267. "Protocollo": "",
  268. "Autorizzazione": "",
  269. "Ricetta": "",
  270. "Altro": "",
  271. "Numerazione": "",
  272. "Bloccato": 0,
  273. "ID_Utente": "LINDE\\IT00F4",
  274. "Flusso Strumenti": 0,
  275. "Flusso Ossigeno": 0,
  276. "Parente stretto": "",
  277. "MedicoImport": "",
  278. "ProdottoImport": "",
  279. "Diagnosi": "",
  280. "SospesoImport": "",
  281. "StrumentoImport": "",
  282. "DescrStrumento": "",
  283. "FRI": 0,
  284. "ORI": 0,
  285. "Informazioni Ambientali": "",
  286. "Unità Operativa": "",
  287. "Flusso Accessori": 0,
  288. "ASLN": "",
  289. "DistrettoN": "",
  290. "Totale Sospeso": 0,
  291. "Tot Sospeso FT": 0,
  292. "Dotazione": 0,
  293. "Usa Consumo Reale": 0,
  294. "Conta": 0,
  295. "Nr_ Farmacia": "",
  296. "Tipo Ventilazione": 0,
  297. "Tipo di Servizio": 0,
  298. "Tipologia": 1,
  299. "Erma": 0,
  300. "Ult_ Cons_ POT": "1753-01-01T00:00:00.000Z",
  301. "Note Palmare": "",
  302. "Provenienza": "",
  303. "ShortDim3": "ASL",
  304. "ShortDim4": "020400",
  305. "ShortDim5": "GOX",
  306. "ShortDim6": "010909000",
  307. "ShortDim9": "",
  308. "ShortDim10": "P260347",
  309. "Shortdim12": "TM",
  310. "Frazione": "",
  311. "Zona": "",
  312. "Venditore": "",
  313. "Filiale": "",
  314. "Agente": "",
  315. "ASLOLD": "",
  316. "DistrettoOLD": "",
  317. "SomministrazioneOld": "",
  318. "MedicoOLD": "",
  319. "CatPAZOLD": "",
  320. "StrumentoOLD": "",
  321. "Sync Date Modified": "2019-05-08T10:52:15.283Z",
  322. "First Name": "LUIGI",
  323. "Middle Name": "",
  324. "Surname": "MERALDI",
  325. "Initials": "",
  326. "Installation Module": 0,
  327. "ASL Code": "",
  328. "Città Nascita": "",
  329. "CAP Nascita": "",
  330. "E-mail": "",
  331. "Data ultima assistenza": "1753-01-01T00:00:00.000Z",
  332. "Patient Type": 1,
  333. "STP Code": "",
  334. "CAP Iscr_ Sanitaria": "",
  335. "City Iscr_ Sanitaria": "",
  336. "Indirizzo Residenza": "VIA CARDUCCI 16C",
  337. "Città Residenza": "PORTALBERA",
  338. "CAP Residenza": "27040",
  339. "Provincia Residenza": "PV",
  340. "Cod_ Regione Residenza": "LOM",
  341. "Codice Paese Residenza": "IT",
  342. "Standard Next Deliv_ Date": 0,
  343. "User Filter Dim_ 1": "DOM221000",
  344. "Patient Id": "",
  345. "Patient Profile Code": "",
  346. "Istat Code": "018118",
  347. "Patologia": "",
  348. "RecID": {
  349. "type": "Buffer",
  350. "data": [
  351. 96,
  352. 234,
  353. 0,
  354. 0,
  355. 2,
  356. 123,
  357. 255,
  358. 80,
  359. 0,
  360. 50,
  361. 0,
  362. 54,
  363. 0,
  364. 48,
  365. 0,
  366. 51,
  367. 0,
  368. 52,
  369. 0,
  370. 55,
  371. 0,
  372. 0,
  373. 0,
  374. 0,
  375. 0
  376. ]
  377. },
  378. "Range Of Supports Code": "",
  379. "Service Starting Date": "1753-01-01T00:00:00.000Z",
  380. "Service Expiration Date": "1753-01-01T00:00:00.000Z",
  381. "Service Item No_": "",
  382. "Service Order No_": "",
  383. "RecGUID": "06A7233E-F5E0-4637-8EE9-DB680681EC0A",
  384. "Delivery Type": ""
  385. }
  386. ],
  387. "message": "data retrieved successfully"
  388. }

vc9ivgsu

vc9ivgsu1#

我不知道这是否足以简单地告诉你,这些例子将工作在任何财产?

  1. [JsonProperty("Global Dimension 1 Code")]
  2. public string GlobalDimension1Code {get;set;}
  3. [JsonProperty("Unità Operativa")]
  4. public string UnitOperativa { get; set; }

字符串
它会将字符串中的“奇怪”命名属性Map到模型中的“正确”命名属性。
然后简单地在模型上不包含您希望忽略的属性,将从对象中删除它们。
我仍然对这里提出的任务有点困惑,因为你的措辞有点奇怪?但这应该解决你的问题是吗?如果不是,请详细说明为什么不。
我没有看到一个场景,它将是相关的,试图改变属性名称,以这种方式,当你可以只启用Map作为一个属性的模型,是吗?
你甚至只需要执行:

  1. var responseData = JsonConvert.DeserializeObject<APILindeResponseWrapper<PatientData>>(apiResponse);

展开查看全部

相关问题