簡體   English   中英

我們如何將 JSON 數據反序列化為 c# object 從 ZDB974238714CA8DE634A7CE1D083A 響應

[英]How can we deserialize JSON data to c# object from API response

我需要反序列化我的 json 數據。 我正在使用 Newtonsoft.Json 進行 json 操作。 我嘗試了很多方法來反序列化這些數據,但我失敗了。 順便說一句,我需要總結一下我的系統以便更好地理解。 我每分鍾都將數據發布到 API。 以及它對我的回應。 所以我試圖反序列化響應。

我需要做什么來反序列化這個 json 並像普通的 c# object 一樣使用它? 我想反序列化 res變量。 感謝您的關注。

這是主要代碼

 var data = new SendData
            {
                Readtime = time,
                Stationid = new Guid(_stationid),
                SoftwareVersion = softwareVersion,
                Period = period,
                AkisHizi = akisHizi,
                AkisHizi_Status = status,
                AKM = akm,
                AKM_Status = status,
                CozunmusOksijen = cozunmusOksijen,
                CozunmusOksijen_Status = status,
                Debi = debi,
                Debi_Status = status,
                DesarjDebi = desarjDebi,
                DesarjDebi_Status = status,
                KOi = koi,
                KOi_Status = status,
                pH = ph,
                pH_Status = status,
                Sicaklik = sicaklik,
                Sicaklik_Status = status,
                Iletkenlik = iletkenlik,
                Iletkenlik_Status = status
            };

            var res = Services.sendData(data);

            MessageBox.Show(res.objects.ToString());

這是我的服務 model PostData 方法

 private ResultStatus<T> PostData<T>(string url, string data) where T : new()
        {
            try
            {
                using (var webClient = new WebClient())
                {

                    webClient.Encoding = Encoding.UTF8;
                    webClient.Headers.Add("AToken", JsonConvert.SerializeObject(new AToken { TicketId = this.TicketId.ToString() }));

                    var resp = webClient.UploadString(this.Url + url, data);

                    return JsonConvert.DeserializeObject<ResultStatus<T>>(resp);

                }
            }
            catch (Exception ex)
            {
                return new ResultStatus<T>
                {
                    message = ex.Message + System.Environment.NewLine + url
                };
            }

        }

這是 sendData 方法

public ResultStatus<object> sendData(SendData data)
        {

            var res = PostData<object>(this.stationType.ToString() + "/SendData", JsonConvert.SerializeObject(data));

            return res;

        }

這是 MessageBox 結果(json 數據)

{ 
'Period': 1, 
'ReadTime': 
'2022-08-22714:01:00', 
'AKM': 65.73, 
'AKM_Status': 1,
'CozunmusOksijen': 0.2,
'CozunmusOksijen_Status': 1,
'Debi': 1.0,
'Debi_Status': 1,
'KOi': 25.1,
'KOi_Status': 1
}

您的 JSON 可能是,

{ 
"Period": 1, 
"ReadTime": "2022-08-22T14:01:00", 
"AKM": 65.73, 
"AKM_Status": 1,
"CozunmusOksijen": 0.2,
"CozunmusOksijen_Status": 1,
"Debi2": 1.0,
"Debi_Status": 1,
"KOi": 25.1,
"KOi_Status": 1
}

https://app.quicktype.io/ , C# model 將是,

// <auto-generated />
//
// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
//
//    using QuickType;
//
//    var thing = Thing.FromJson(jsonString);

namespace QuickType
{
    using System;
    using System.Collections.Generic;

    using System.Globalization;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Converters;

    public partial class Thing
    {
        [JsonProperty("Period")]
        public long Period { get; set; }

        [JsonProperty("ReadTime")]
        public DateTimeOffset ReadTime { get; set; }

        [JsonProperty("AKM")]
        public double Akm { get; set; }

        [JsonProperty("AKM_Status")]
        public long AkmStatus { get; set; }

        [JsonProperty("CozunmusOksijen")]
        public double CozunmusOksijen { get; set; }

        [JsonProperty("CozunmusOksijen_Status")]
        public long CozunmusOksijenStatus { get; set; }

        [JsonProperty("Debi2")]
        public long Debi2 { get; set; }

        [JsonProperty("Debi_Status")]
        public long DebiStatus { get; set; }

        [JsonProperty("KOi")]
        public double KOi { get; set; }

        [JsonProperty("KOi_Status")]
        public long KOiStatus { get; set; }
    }

    public partial class Thing
    {
        public static Thing FromJson(string json) => JsonConvert.DeserializeObject<Thing>(json, QuickType.Converter.Settings);
    }

    public static class Serialize
    {
        public static string ToJson(this Thing self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
    }

    internal static class Converter
    {
        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
        {
            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
            DateParseHandling = DateParseHandling.None,
            Converters =
            {
                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
            },
        };
    }
}

根據https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-how-to?pivots=dotnet-6-0#how-to-read-json-as-網絡對象反序列化

 Thing? thing = JsonSerializer.Deserialize<Thing>(res);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM