我必须使用System.Net.Http.HttpClient从API中检索一些冗长的JSON数据。为了将这些数据正确地转换为所需的格式,我必须删除属性名称(而不是值)中的白色空格和特殊字符(如重音和下划线),然后删除所需格式中不存在的“属性名称”:“属性值”对。如何才能实现这一点?
我试过这样的方法,但没有效果:
string apiResponse = await response.Content.ReadAsStringAsync();
var jsonSerializerSettings = new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
var interimObject = JsonConvert.DeserializeObject<ExpandoObject>(apiResponse);
var myJsonOutput = JsonConvert.SerializeObject(interimObject, jsonSerializerSettings);
var responseData = JsonConvert.DeserializeObject<APILindeResponseWrapper<PatientData>>(myJsonOutput);
字符串
特别是,白色空格被删除了。我的APILDeResponseWrapper是:
{
public class APILindeResponseWrapper<T>
{
public string Status { get; set; }
public List<DataWrapper<T>> Data { get; set; }
public string Message;
}
public partial class DataWrapper<T>
{
public Timestamp Timestamp { get; set; }
public T Data;
}
public partial class Timestamp
{
public string Type;
public string[] Data;
}
}
型
我的患者数据是:
public class PatientData
{
public PatientData() { }
[Required(ErrorMessage = "{0} Must Be Filled")]
public string? No { get; set; }
[Required(ErrorMessage = "{0} Must Be Filled")]
public string? Nome { get; set; }
[Required(ErrorMessage = "{0} Must Be Filled")]
public string? FirstName { get; set; }
[Required(ErrorMessage = "{0} Must Be Filled")]
public string? Surname { get; set; }
public string? CittaNascita { get; set; }
public DateTime? DataDiNascita { get; set; }
[Required(ErrorMessage = "{0} Must Be Filled")]
public int? Sesso { get; set; }
public string? CodiceFiscale { get; set; }
[Required(ErrorMessage = "{0} Must Be Filled")]
public string? Indirizzo { get; set; }
public string? Frazione { get; set; }
[Required(ErrorMessage = "{0} Must Be Filled")]
public string? CAP { get; set; }
[Required(ErrorMessage = "{0} Must Be Filled")]
public string? Città { get; set; }
[Required(ErrorMessage = "{0} Must Be Filled")]
public string? Provincia { get; set; }
public string? TelefonoDiConsegna { get; set; }
public string? IndirizzoResidenza { get; set; }
public string? CAPResidenza { get; set; }
public string? CittaResidenza { get; set; }
public string? ProvinciaResidenza { get; set; }
[Required(ErrorMessage = "{0} Must Be Filled")]
public string? ShortDim5 { get; set; }
public DateTime? DataAutorizzazione { get; set; }
public DateTime? DataScadenza { get; set; }
[Required(ErrorMessage = "{0} Must Be Filled")]
public string? CustomerNo { get; set; }
[Required(ErrorMessage = "{0} Must Be Filled")]
public string? ShortDim4 { get; set; }
[Required(ErrorMessage = "{0} Must Be Filled")]
public string? StatoDelServizio { get; set; }
[Required(ErrorMessage = "{0} Must Be Filled")]
public string? ContractNo { get; set; }
public DateTime? DataDiInstallazione { get; set; }
public string? Medico { get; set; }
}
型
来自postman的API响应示例如下:
{
"status": 200,
"data": [
{
"timestamp": {
"type": "Buffer",
"data": [
0,
0,
0,
1,
179,
245,
49,
202
]
},
"Customer No_": "M037984",
"Name": "ASST PAVIA",
"No_": "P260339",
"Codice Ricerca": "COMASCHI ROMOLO 19300523",
"Nome": "COMASCHI ROMOLO",
"Nome2": "",
"Data di Nascita": "1930-05-23T00:00:00.000Z",
"Luogo di Nascita": "",
"Sesso": 1,
"Codice Fiscale": "CMSRML30E23M119E",
"Indirizzo": "CASA TORREGGIANI 8",
"Città": "MONTECALVO VERSIGGIA",
"CAP": "27047",
"Provincia": "PV",
"Cod_ Regione": "LOM",
"Codice Paese": "IT",
"Global Dimension 1 Code": "DOM221000",
"Global Dimension 2 Code": "DOM202",
"Contract No_": "CNT037453",
"Address 2": "",
"Ultimo Stato": "2019-05-08T00:00:00.000Z",
"Stato del Servizio": "D",
"Sospesa Fatturazione": 1,
"Sospeso Servizio": 1,
"Gita": "",
"Giro": 0,
"A Giro": 0,
"Cadenza": 0,
"Tipo Consegna": "",
"Data Ultimo Aggior_ Consegna": "1753-01-01T00:00:00.000Z",
"Prossima Consegna Prevista": "1753-01-01T00:00:00.000Z",
"Time Slot": "",
"Indirizzo di Consegna": "CASA TORREGGIANI 8",
"CAP di Consegna": "27047",
"Comune di Consegna": "MONTECALVO VERSIGGIA",
"Provincia di Consegna": "PV",
"Cod_ Regione di Consegna": "LOM",
"Telefono di Consegna": "3403604306",
"Piano": "",
"NrInterno": "",
"Ascensore": 0,
"Data Ultima Modifica": "2019-05-09T00:00:00.000Z",
"Flusso Prescritto": 0,
"Oredie": 0,
"Flusso Reale": 0,
"Tipo di Fornitura": 0,
"Prodotto": "",
"Apparecchiatura": "",
"Posizione Sanitaria": "",
"Somministrazione": "",
"Data di Installazione": "2019-04-17T00:00:00.000Z",
"Data di Ritiro": "1753-01-01T00:00:00.000Z",
"Data Ultima Consegna": "1753-01-01T00:00:00.000Z",
"Medico": "SPRT",
"ASL": "",
"Distretto": "",
"Data Autorizzazione": "1753-01-01T00:00:00.000Z",
"Data Scadenza": "1753-01-01T00:00:00.000Z",
"Protocollo": "",
"Autorizzazione": "",
"Ricetta": "",
"Altro": "",
"Numerazione": "",
"Bloccato": 0,
"ID_Utente": "LINDE\\IT00F4",
"Flusso Strumenti": 0,
"Flusso Ossigeno": 0,
"Parente stretto": "",
"MedicoImport": "",
"ProdottoImport": "",
"Diagnosi": "",
"SospesoImport": "",
"StrumentoImport": "",
"DescrStrumento": "",
"FRI": 0,
"ORI": 0,
"Informazioni Ambientali": "",
"Unità Operativa": "",
"Flusso Accessori": 0,
"ASLN": "",
"DistrettoN": "",
"Totale Sospeso": 0,
"Tot Sospeso FT": 0,
"Dotazione": 0,
"Usa Consumo Reale": 0,
"Conta": 0,
"Nr_ Farmacia": "",
"Tipo Ventilazione": 0,
"Tipo di Servizio": 0,
"Tipologia": 1,
"Erma": 0,
"Ult_ Cons_ POT": "1753-01-01T00:00:00.000Z",
"Note Palmare": "",
"Provenienza": "",
"ShortDim3": "ASL",
"ShortDim4": "020400",
"ShortDim5": "GOX",
"ShortDim6": "010909000",
"ShortDim9": "",
"ShortDim10": "P260339",
"Shortdim12": "CA",
"Frazione": "",
"Zona": "",
"Venditore": "",
"Filiale": "",
"Agente": "",
"ASLOLD": "",
"DistrettoOLD": "",
"SomministrazioneOld": "",
"MedicoOLD": "",
"CatPAZOLD": "",
"StrumentoOLD": "",
"Sync Date Modified": "2019-05-09T09:21:44.473Z",
"First Name": "ROMOLO",
"Middle Name": "",
"Surname": "COMASCHI",
"Initials": "",
"Installation Module": 0,
"ASL Code": "",
"Città Nascita": "",
"CAP Nascita": "",
"E-mail": "",
"Data ultima assistenza": "1753-01-01T00:00:00.000Z",
"Patient Type": 1,
"STP Code": "",
"CAP Iscr_ Sanitaria": "",
"City Iscr_ Sanitaria": "",
"Indirizzo Residenza": "CASA TORREGGIANI 8",
"Città Residenza": "MONTECALVO VERSIGGIA",
"CAP Residenza": "27047",
"Provincia Residenza": "PV",
"Cod_ Regione Residenza": "LOM",
"Codice Paese Residenza": "IT",
"Standard Next Deliv_ Date": 0,
"User Filter Dim_ 1": "DOM221000",
"Patient Id": "",
"Patient Profile Code": "",
"Istat Code": "018096",
"Patologia": "",
"RecID": {
"type": "Buffer",
"data": [
96,
234,
0,
0,
2,
123,
255,
80,
0,
50,
0,
54,
0,
48,
0,
51,
0,
51,
0,
57,
0,
0,
0,
0,
0
]
},
"Range Of Supports Code": "",
"Service Starting Date": "1753-01-01T00:00:00.000Z",
"Service Expiration Date": "1753-01-01T00:00:00.000Z",
"Service Item No_": "",
"Service Order No_": "",
"RecGUID": "197FA2DE-7410-45CF-B36B-53E808D37497",
"Delivery Type": ""
},
{
"timestamp": {
"type": "Buffer",
"data": [
0,
0,
0,
1,
180,
115,
47,
230
]
},
"Customer No_": "M037984",
"Name": "ASST PAVIA",
"No_": "P260347",
"Codice Ricerca": "MERALDI LUIGI 19310523",
"Nome": "MERALDI LUIGI",
"Nome2": "",
"Data di Nascita": "1931-05-23T00:00:00.000Z",
"Luogo di Nascita": "",
"Sesso": 1,
"Codice Fiscale": "MRLLGU31E23I968J",
"Indirizzo": "VIA CARDUCCI 16C",
"Città": "PORTALBERA",
"CAP": "27040",
"Provincia": "PV",
"Cod_ Regione": "LOM",
"Codice Paese": "IT",
"Global Dimension 1 Code": "DOM221000",
"Global Dimension 2 Code": "DOM202",
"Contract No_": "CNT037453",
"Address 2": "",
"Ultimo Stato": "2019-05-13T00:00:00.000Z",
"Stato del Servizio": "SOS",
"Sospesa Fatturazione": 1,
"Sospeso Servizio": 1,
"Gita": "",
"Giro": 0,
"A Giro": 0,
"Cadenza": 0,
"Tipo Consegna": "",
"Data Ultimo Aggior_ Consegna": "1753-01-01T00:00:00.000Z",
"Prossima Consegna Prevista": "1753-01-01T00:00:00.000Z",
"Time Slot": "",
"Indirizzo di Consegna": "VIA CARDUCCI 16C",
"CAP di Consegna": "27040",
"Comune di Consegna": "PORTALBERA",
"Provincia di Consegna": "PV",
"Cod_ Regione di Consegna": "LOM",
"Telefono di Consegna": "3351028031",
"Piano": "",
"NrInterno": "",
"Ascensore": 0,
"Data Ultima Modifica": "2019-05-08T00:00:00.000Z",
"Flusso Prescritto": 0,
"Oredie": 0,
"Flusso Reale": 0,
"Tipo di Fornitura": 0,
"Prodotto": "",
"Apparecchiatura": "",
"Posizione Sanitaria": "",
"Somministrazione": "",
"Data di Installazione": "2019-05-13T00:00:00.000Z",
"Data di Ritiro": "1753-01-01T00:00:00.000Z",
"Data Ultima Consegna": "1753-01-01T00:00:00.000Z",
"Medico": "SPRT",
"ASL": "",
"Distretto": "",
"Data Autorizzazione": "1753-01-01T00:00:00.000Z",
"Data Scadenza": "1753-01-01T00:00:00.000Z",
"Protocollo": "",
"Autorizzazione": "",
"Ricetta": "",
"Altro": "",
"Numerazione": "",
"Bloccato": 0,
"ID_Utente": "LINDE\\IT00F4",
"Flusso Strumenti": 0,
"Flusso Ossigeno": 0,
"Parente stretto": "",
"MedicoImport": "",
"ProdottoImport": "",
"Diagnosi": "",
"SospesoImport": "",
"StrumentoImport": "",
"DescrStrumento": "",
"FRI": 0,
"ORI": 0,
"Informazioni Ambientali": "",
"Unità Operativa": "",
"Flusso Accessori": 0,
"ASLN": "",
"DistrettoN": "",
"Totale Sospeso": 0,
"Tot Sospeso FT": 0,
"Dotazione": 0,
"Usa Consumo Reale": 0,
"Conta": 0,
"Nr_ Farmacia": "",
"Tipo Ventilazione": 0,
"Tipo di Servizio": 0,
"Tipologia": 1,
"Erma": 0,
"Ult_ Cons_ POT": "1753-01-01T00:00:00.000Z",
"Note Palmare": "",
"Provenienza": "",
"ShortDim3": "ASL",
"ShortDim4": "020400",
"ShortDim5": "GOX",
"ShortDim6": "010909000",
"ShortDim9": "",
"ShortDim10": "P260347",
"Shortdim12": "TM",
"Frazione": "",
"Zona": "",
"Venditore": "",
"Filiale": "",
"Agente": "",
"ASLOLD": "",
"DistrettoOLD": "",
"SomministrazioneOld": "",
"MedicoOLD": "",
"CatPAZOLD": "",
"StrumentoOLD": "",
"Sync Date Modified": "2019-05-08T10:52:15.283Z",
"First Name": "LUIGI",
"Middle Name": "",
"Surname": "MERALDI",
"Initials": "",
"Installation Module": 0,
"ASL Code": "",
"Città Nascita": "",
"CAP Nascita": "",
"E-mail": "",
"Data ultima assistenza": "1753-01-01T00:00:00.000Z",
"Patient Type": 1,
"STP Code": "",
"CAP Iscr_ Sanitaria": "",
"City Iscr_ Sanitaria": "",
"Indirizzo Residenza": "VIA CARDUCCI 16C",
"Città Residenza": "PORTALBERA",
"CAP Residenza": "27040",
"Provincia Residenza": "PV",
"Cod_ Regione Residenza": "LOM",
"Codice Paese Residenza": "IT",
"Standard Next Deliv_ Date": 0,
"User Filter Dim_ 1": "DOM221000",
"Patient Id": "",
"Patient Profile Code": "",
"Istat Code": "018118",
"Patologia": "",
"RecID": {
"type": "Buffer",
"data": [
96,
234,
0,
0,
2,
123,
255,
80,
0,
50,
0,
54,
0,
48,
0,
51,
0,
52,
0,
55,
0,
0,
0,
0,
0
]
},
"Range Of Supports Code": "",
"Service Starting Date": "1753-01-01T00:00:00.000Z",
"Service Expiration Date": "1753-01-01T00:00:00.000Z",
"Service Item No_": "",
"Service Order No_": "",
"RecGUID": "06A7233E-F5E0-4637-8EE9-DB680681EC0A",
"Delivery Type": ""
}
],
"message": "data retrieved successfully"
}
型
1条答案
按热度按时间vc9ivgsu1#
我不知道这是否足以简单地告诉你,这些例子将工作在任何财产?
字符串
它会将字符串中的“奇怪”命名属性Map到模型中的“正确”命名属性。
然后简单地在模型上不包含您希望忽略的属性,将从对象中删除它们。
我仍然对这里提出的任务有点困惑,因为你的措辞有点奇怪?但这应该解决你的问题是吗?如果不是,请详细说明为什么不。
我没有看到一个场景,它将是相关的,试图改变属性名称,以这种方式,当你可以只启用Map作为一个属性的模型,是吗?
你甚至只需要执行:
型