c# - JsonDeserialize 为某些字符串返回 null(仅对某些字符串)
问题描述
我正在尝试将一个相当大的 Json 反序列化为我制作的 C# 类。类中的所有对象都已正确反序列化,但 JsonConvert 对两个对象有问题。它们是 C# 中的字符串,其中一些字符串正确返回,其他字符串为空。由于 Json 非常大(30MB),我只能在这里发布一小段摘录,但它应该让您了解 JSON 的结构:
"attributes" : {
"AnzahlFall" : 1,
"Meldedatum" : 1585612800000,
"IdLandkreis" : "08327",
"Datenstand" : "26.10.2020, 00:00 Uhr",
}
这是众多领域之一。有问题的字符串是“IdLandkreis”和“Datanstand”。在 Json 文件中,这些值中的任何一个都不可能为空或为空,但是在再次反序列化和序列化后得到的是:
"attributes" :
{"AnzahlFall":1,
"NeuerFall":0,
"Meldedatum":1601510400000,
"DatenStand":null,
"idLandkreis":null
}
这是整个 C# 部分:
public class Attributes
{
public int AnzahlFall { get; set; }
public int NeuerFall { get; set; }
public long Meldedatum { get; set; }
public string DatenStand { get; set; }
public string idLandkreis { get; set; }
}
public class Report
{
public Attributes attributes { get; set; }
}
public class Caselist
{
public bool exceededTransferLimit { get; set; }
public List<Report> features { get; set; }
}
我用它来调用JsonConverter:
Caselist rki_data = JsonConvert.DeserializeObject(readData());
我尝试了什么:
- 对“iDLandkreis”使用其他数据类型,例如 int -> 仍然为 0
我重命名了变量,但没有任何变化。通过 Caselist 解析时,输出看起来像这样:
Landkreisid 01060Landkreisid 01060Landkreisid 01060Landkreisid 01060Landkreisid 01060Landkreisid 01060Landkreisid 01060Landkreisid 01060Landkreisid 01060Landkreisid 01060Landkreisid 01060Landkreisid 01060Landkreisid 01060Landkreisid 01060Landkreisid 01060Landkreisid 01060Landkreisid 01060Landkreisid 01060Landkreisid 01060Landkreisid Landkreisid Landkreisid Landkreisid Landkreisid Landkreisid Landkreisid Landkreisid Landkreisid Landkreisid Landkreisid Landkreisid Landkreisid
这些数据是关于 Covid-19 的,由德国当地的一家科学研究所提供
您可以在此处获取部分数据(它被拆分为多个文件):
我会非常感谢你的帮助。
问候,乔纳森
解决方案
Datenstand
在 json 和DatenStand
poco 中。如果[JsonProperty("Datenstand")]
您想保留您的 poco 名称但序列化名称应该不同,请使用
所以你的 poco 里会有这样的东西:
public class Attributes
{
public int AnzahlFall { get; set; }
public int NeuerFall { get; set; }
public long Meldedatum { get; set; }
[JsonProperty("Datenstand")]
public string DatenStand { get; set; }
[JsonProperty("IdLandkreis")]
public string idLandkreis { get; set; }
}
我从您的 C# 中看到的更大问题是您似乎没有标准的命名约定。通常你会为 C# 使用 PascalCasing,为 json 文件使用 camlCasing。
如果您有此设置,您还可以将默认设置设置为
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
推荐阅读
- kotlin - 使用 Kotlin 协程同时进行多个 Web 服务调用
- javascript - 根据客户端的时区 (JavaScript) 在下拉列表中选择值
- terminal - XTerm js 不处理 term.write 中的特殊字符,如 \n "\u001b[H\u001b[2J\u001b[3J""
- youtube-api - 无法在 api 控制台中将测试用户添加到我的 youtube 数据 api 应用程序
- python - IndexError:列表索引超出范围 Python 第 36 行
- installation - 我不知道如何将 WIN98 的 VMare Fusion 捆绑文件安装到我的新 Intel 处理器 BigSur Mac
- java - cmake for Java,如何指定主类并使jar文件可执行?
- node.js - 如何处理采购系统中的稀缺资源纠纷
- javascript - 如何在与包含图像的文件不同的另一个文件中使用图像源?
- javascript - 无法将消息时间戳与 x 天数进行比较