C# 中的序列化和反序列化 HttpClient 负载

问题描述 投票:0回答:1

我必须使用 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);

特别是消除了空格。 我的 APILindeResponseWrapper 是:

{
    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; }
       
    }   


来自邮递员的 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"
}
c# .net rest json.net json-deserialization
1个回答
0
投票

我不知道仅仅告诉您这些示例适用于任何属性是否就足够了?

     [JsonProperty("Global Dimension 1 Code")]
    public string GlobalDimension1Code {get;set;}

[JsonProperty("Unità Operativa")]
        public string UnitOperativa { get; set; }

它将把字符串中的“奇数”命名属性映射到模型中的“正确”命名属性。

然后,只要模型上没有您希望忽略的属性,就会将它们从对象中删除。

我对这里提出的任务仍然有点困惑,因为你的措辞有点奇怪?但这应该可以解决你的问题吧? 如果没有,请详细说明为什么不。

© www.soinside.com 2019 - 2024. All rights reserved.