【问题标题】:JsonSerializer.Deserialize<T>(); in System.Text.Json not deserialize correctlyJsonSerializer.Deserialize<T>();在 System.Text.Json 中没有正确反序列化
【发布时间】:2021-05-18 19:25:18
【问题描述】:

我正在尝试用System.Text.Json 反序列化this json,但我不能,而且我不知道为什么它不起作用,结果如下:

PS:而且不知道有没有影响,但是里面元素所在的数组,没有名字,直接进入链接看看 PS/2:这发生在列表中的任何对象上

这是我的代码:

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&lt;ServerList[]&gt;(json);JsonConvert.DeserializeObject&lt;ServerList[]&gt;(json); 并且工作正常,它只是在标准 C# 库中不起作用

【问题讨论】:

    标签: c# json json.net system.text.json


    【解决方案1】:

    System.Text.Json 尊重您对类施加的可见性约束。删除你的设置器上的internal

    【讨论】:

    • 或者用JsonInclude标记他们
    • 使用 C# 9,它甚至可以使用 init
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 2019-08-21
    • 2021-07-17
    • 2019-04-06
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多