![](/img/trans.png)
[英]System.Text.Json JsonSerializer.Deserialize<TValue>(...) cannot deserialize object[] type
[英]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
屬性更改為JsonProperty
和JsonSerializer.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.