Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# JsonDeserialize对某些字符串返回null(仅对某些字符串)_C#_Json_Json.net - Fatal编程技术网

C# JsonDeserialize对某些字符串返回null(仅对某些字符串)

C# JsonDeserialize对某些字符串返回null(仅对某些字符串),c#,json,json.net,C#,Json,Json.net,我正在尝试将一个相当大的Json反序列化为我创建的C#类。 类中的所有对象都已正确反序列化,但JsonConvert在处理两个对象时遇到问题。它们是C#中的字符串,其中一些字符串返回正确,另一些为空。由于Json非常大(30MB),我只能在这里发布一个小摘录,但它应该能让您了解Json的结构: "attributes" : { "AnzahlFall" : 1, "Meldedatum" : 158561

我正在尝试将一个相当大的Json反序列化为我创建的C#类。 类中的所有对象都已正确反序列化,但JsonConvert在处理两个对象时遇到问题。它们是C#中的字符串,其中一些字符串返回正确,另一些为空。由于Json非常大(30MB),我只能在这里发布一个小摘录,但它应该能让您了解Json的结构:

"attributes" : {
        "AnzahlFall" : 1,
        "Meldedatum" : 1585612800000, 
        "IdLandkreis" : "08327", 
        "Datenstand" : "26.10.2020, 00:00 Uhr", 
      }
这是许多领域中的一个。有问题的字符串是“IdLandkreis”和“Datenstand”。在Json文件中,这些值中的任何一个都不可能为null或为空,但在再次反序列化和序列化之后,我得到的结果如下:

"attributes" : 
{"AnzahlFall":1,
"NeuerFall":0,
"Meldedatum":1601510400000,
"DatenStand":null,
"idLandkreis":null
}
这是整个C部分:

公共类属性
{
public int AnzahlFall{get;set;}
public int NeuerFall{get;set;}
公共长Meldedatum{get;set;}
公共字符串DatenStand{get;set;}
公共字符串idLandkreis{get;set;}
}
公开课报告
{
公共属性{get;set;}
}
公共类案件清单
{
公共布尔值超出TransferLimit{get;set;}
公共列表功能{get;set;}
}
我用它来调用JsonConverter:

案例列表rki_data=JsonConvert.DeserializeObject(readData())

我尝试的是:

  • 使用其他数据类型,例如int表示“iDLandkreis”->仍然为0
我重命名了变量,但没有任何更改。通过案例列表进行分析时,输出如下所示:

兰德克里希德01060兰德克里希德01060兰德克里希德01060兰德克里希德01060兰德克里希德01060兰德克里希德01060兰德克里希德01060兰德克里希德01060兰德克里希德01060兰德克里希德01060兰德克里希德01060兰德克里希德01060兰德克里希德01060兰德克里希德01060兰德克里希德01060兰德克里希德01060兰德克里希德兰德克里希德Landkreisid Landkreisid Landkreisid Landkreisid Landkreisid Landkreisid Landkreisid Landkreisid Landkreisid Landkreisid Landkreisid

数据是关于新冠病毒-19的,由德国当地的一家科学研究所提供

您可以在此处获取部分数据(分为多个文件):

我非常感谢你的帮助

您好, 乔纳森是区分大小写的。我认为问题来自您的房产名称:

  • 达滕斯坦!=达滕斯坦
  • idLandkreis!=伊德兰克雷斯

json中的Seb
Datenstand
,poco中的
Datenstand
。如果希望保留poco名称,但序列化名称应不同,请使用
[JsonProperty(“Datenstand”)]

因此,您的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

如果要进行此设置,还可以将


我终于明白了。这不是我的代码或JSONVERT的问题。
我只是忘了将特定对象放在JSON请求的查询中。我在这里发布的Json文件不是我在代码中下载的那个。我下载错了。

在您的c#模型中,这些属性是什么数据类型?您正在运行什么代码来进行反序列化?在json中的post
Datenstand
和poco中的
Datenstand
中添加了信息。使用
[JsonProperty(“Datenstand”)]
如果您希望保留poco名称,但序列化名称应不同,您可以通过使用
propertyNameCaseSensitive=true
指定
JsonSerializerOptions
来解决此问题。请参阅。虽然c#区分大小写,但Json.Net不区分大小写。默认情况下,它不区分大小写。当外壳不同时,它将与性能匹配@gunr2171这不是关于如何设置默认设置的假设吗?@gunr2171这对于
System.Text.Json
是不正确的。从Microsoft Documentation>PropertyNameCaseSensitive:获取或设置一个值,该值确定属性名称在反序列化过程中是否使用不区分大小写的比较。默认值为false。@DouglasRiddle对于Microsoft的json库可能不正确,但此问题标记为“json.Net”,并且使用的代码来自该库。如果我仔细分析对象,输出仍然是这样的:01060Landkreisid 01060Landkreisid 01060Landkreisid 01060Landkreisid 01060Landkreisid 01060Landkreisid Landkreisid Landkreisid Landkreisid Landkreisid Landkreisid Landkreisid Landkreisid Landkreisid Landkreisid LandkreisidLandkreisid Landkreisid Landkreisid Landkreisid Landkreisid Landkreisid Landkreisid LandkreisidLandkreisid@Jonnyb170你能在OP中分享你的JSON吗?另外,如果您已经设置了一些默认设置或contractresolver,是否也有可能?至少有足够的信息让你可以验证你得到了什么,因为现在看来它并没有真正的链接到数据。抱歉,我现在不太懂编码,所以我真的不知道contractresolver是什么。但我可能没有,因为我根本没有对JsonConvert做任何更改。
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; }
}
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
    ContractResolver = new CamelCasePropertyNamesContractResolver()
};