提问者:小点点

JSONSerializer.Deserialize不在对象内填充列表[重复]


我正在一个服务器端的Blazor应用程序上工作,遇到了一个返回以下JSON的特定API调用的问题。

{
  "id": 2,
  "status": 1,
  "fileName": "Test PDF",
  "fileType": "PDF",
  "fileBytes": "",
  "allSchemes": false,
  "dateModified": "2020-06-12T12:32:08.99",
  "dateCreated": "2020-06-11T11:32:19.877",
  "isNew": false,
  "schemes": [
    {
      "schemeCode": "0185",
      "schemeName": null,
      "baseCurrency": null
    },
    {
      "schemeCode": "0186",
      "schemeName": null,
      "baseCurrency": null
    }
  ]
}

然而,当我使用下面的代码反序列化时,方案列表总是0。 其他详细信息将按预期填充

var accessToken = await _apiService.RequestNewToken(_httpClient);
_httpClient.SetBearerToken(accessToken);

return await JsonSerializer.DeserializeAsync<SchemeDocument>
    (await _httpClient.GetStreamAsync($"api/schemeDocument/{id}"), new JsonSerializerOptions { PropertyNameCaseInsensitive = true });

SchemeDocument类是

public class SchemeDocument
{        
    public int Id { get; set; }

    public SchemeDocumentStatus Status { get; set; }

    [Display(Name = "File Name")]
    public string FileName { get; set; }

    [Display(Name = "First Type")]
    public string FileType { get; set; }

    public byte[] FileBytes { get; set; }

    [Display(Name = "All Schemes")]
    public bool AllSchemes { get; set; }        

    public DateTime? DateModified { get; set; }

    public DateTime DateCreated { get; set; }

    [Computed]
    public bool IsNew => this.Id == default(int);

    [Write(false)]
    public List<Scheme> Schemes { get; } = new List<Scheme>();
}

共1个答案

匿名用户

List属性需要一个公共setter。

这是我仍然使用Newtonsoft JSON的原因之一,因为它让我拥有私有的setter。