簡體   English   中英

JsonSerializer.反序列化<t> (); 在 System.Text.Json 中沒有正確反序列化</t>

[英]JsonSerializer.Deserialize<T>(); in System.Text.Json not deserialize correctly

我正在嘗試使用System.Text.Json反序列化json,但我不能,而且我不知道為什么它不起作用,結果如下:

PS:我不知道這是否會影響,但是元素所在的數組沒有名稱,只需輸入鏈接並查看PS/2:列表中的任何 object 都會發生這種情況

在此處輸入圖像描述

這是我的代碼:

using System.Text.Json.Serialization;

namespace AceOfSpadesServersList
{
    internal sealed class ServerList
    {
        [JsonPropertyName("name")]
        public string Name { get; internal set; }

        [JsonPropertyName("identifier")]
        public string IP { get; internal set; }

        [JsonPropertyName("map")]
        public string Map { get; internal set; }

        [JsonPropertyName("game_mode")]
        public string GameMode { get; internal set; }

        [JsonPropertyName("country")]
        public string Country { get; internal set; }

        [JsonPropertyName("latency")]
        public ushort Latency { get; internal set; }

        [JsonPropertyName("players_current")]
        public byte CurrentPlayers { get; internal set; }

        [JsonPropertyName("players_max")]
        public byte MaxPlayers { get; internal set; }

        [JsonPropertyName("last_updated")]
        public uint LastUpdated { get; internal set; }

        [JsonPropertyName("game_version")]
        public string GameVersion { get; internal set; }
    }
}
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
using AceOfSpadesServersList;

namespace AceOfSpadesServersList
{
    public class AceOfSpadesServersList
    {
        private const string BuildAndShootServersList = "http://services.buildandshoot.com/serverlist.json";

        private readonly HttpClient _httpClient;

        public AceOfSpadesServersList()
        {
            if (_httpClient is null)
                this._httpClient = new HttpClient();
        }

        public async Task GetAllServersAsync()
        {
            var json = string.Empty;

            var streamHttpResponse = await this._httpClient.GetStreamAsync(BuildAndShootServersList);
            using (var sr = new StreamReader(streamHttpResponse, Encoding.UTF8))
                json = await sr.ReadToEndAsync();

            var serverList = JsonSerializer.Deserialize<ServerList[]>(json);
        }
    }
}

我不知道出了什么問題,但我使用Newtonsoft.Json測試了完全相同的代碼,我只是將JsonPropertyName屬性更改為JsonPropertyJsonSerializer.Deserialize<ServerList[]>(json); JsonConvert.DeserializeObject<ServerList[]>(json); 並正常工作,只是在標准 C# 庫中不起作用

System.Text.Json尊重您對 class 施加的可見性約束。 刪除您的二傳手的internal

我有同樣的問題並通過添加 PropertyNamingPolicy 來解決它

   var serverList = JsonSerializer.Deserialize<ServerList[]>(json, new 
    JsonSerializerOptions
    {
        PropertyNamingPolicy = JsonNamingPolicy.CamelCase
    });

暫無
暫無

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

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