【问题标题】:Deserialize JSON object list to C# Class List将 JSON 对象列表反序列化为 C# 类列表
【发布时间】:2022-12-13 01:46:12
【问题描述】:
我有一个由 Python/Flask 制作的 API。我想从该 API 获取数据以在 C# 中使用。我尝试了很多东西,但我没有弄清楚。
以下是来自 API 的一些数据
我写了类来匹配这些数据。
然后我编写了应该用于处理数据的代码。
最后,我从 API 获得了 JSON 格式的响应(没问题)。但是反序列化操作不起作用。 “数据”变量变成了数组,但我看不到/访问来自 Json 的值。
请帮助我,如何反序列化来自 API 的数据。尽管我尝试从互联网上找到很多代码进行反序列化,但我无法处理它。
【问题讨论】:
标签:
c#
.net
api
blazor
deserialization
【解决方案1】:
这并不是您问题的直接答案,但您是否考虑过只使用 dynamic 类型?我发现按预期使用 JSON 更容易,弱类型......
dynamic data = Json.Decode(response);
foreach (dynamic warehouse in data)
{
int companyId = warehouse.company_id;
}
【解决方案2】:
你可以试试这个:var warehouse = Warehouse.FromJson(jsonString);。基本上设置部分:JsonConvert.DeserializeObject<List<Warehouse>>(json, Warehouse.Converter.Settings); 就足够了。您可以使用转换器的最低设置。
using System;
using System.Collections.Generic;
using System.Globalization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
namespace Warehouse
{
public partial class Warehouse
{
[JsonProperty("company_id")]
public long CompanyId { get; set; }
[JsonProperty("id")]
public long Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
public static List<Warehouse> FromJson(string json) => JsonConvert.DeserializeObject<List<Warehouse>>(json, Warehouse.Converter.Settings);
}
public static class Serialize
{
public static string ToJson(this List<Warehouse> self) => JsonConvert.SerializeObject(self, Warehouse.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 }
},
};
}
}