System.Text.JSON 不会反序列化 Newtonsoft 所做的事情

San*_*Riz 13 c# json system.text.json

我有一个 json,新System.Text.Json.JsonSerializer.Deserialize<T>(json_data)序列化为List<T>正确数量的元素,但是里面的对象的所有值都是 null 或 0

Newtonsoft.Json.JsonConvert.DeserializeObject<T>(json_data)正确填充了相同的json 。

班级:

public class SensorValue
    {
        public string StationCode { get; set; }
        public string SensorCode { get; set; }
        public string SensorNameIt { get; set; }
        public string SensorNameDe { get; set; }
        public string SensorNameLd { get; set; }
        public string SensorUnitMeasure { get; set; }
        public DateTime SamplingDateTime { get; set; }
        public Decimal SamplingValue { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

JSON

[{"stationCode":"89190MS","sensorCode":"LT","sensorNameIt":"Temperatura dell´aria","sensorNameDe":"Lufttemperatur","sensorNameLd":"Temperatura dl’aria","sensorUnitMeasure":"°C","samplingDateTime":"2019-11-15T15:10:00","samplingValue":0.3},{"stationCode":"89190MS","sensorCode":"N","sensorNameIt":"Precipitazioni","sensorNameDe":"Niederschlag","sensorNameLd":"plueia","sensorUnitMeasure":"mm","samplingDateTime":"2019-11-15T15:10:00","samplingValue":0.4},{"stationCode":"89190MS","sensorCode":"WR","sensorNameIt":"Direzione del vento","sensorNameDe":"Windrichtung","sensorNameLd":"Direzion dl vënt","sensorUnitMeasure":"° ","samplingDateTime":"2019-11-15T15:10:00","samplingValue":165.7},{"stationCode":"89190MS","sensorCode":"WG","sensorNameIt":"Velocità del vento","sensorNameDe":"Windgeschwindigkeit","sensorNameLd":"Slune dl vënt","sensorUnitMeasure":"m/s","samplingDateTime":"2019-11-15T15:10:00","samplingValue":0.7},{"stationCode":"89190MS","sensorCode":"WG.BOE","sensorNameIt":"Velocitá raffica","sensorNameDe":"Windgeschwindigkeit Böe","sensorNameLd":"Slune dl vënt","sensorUnitMeasure":"m/s","samplingDateTime":"2019-11-15T15:10:00","samplingValue":1.3},{"stationCode":"89190MS","sensorCode":"LF","sensorNameIt":"Umidità relativa","sensorNameDe":"relative Luftfeuchte","sensorNameLd":"Tume relatif","sensorUnitMeasure":"%","samplingDateTime":"2019-11-15T15:10:00","samplingValue":100.0},{"stationCode":"89190MS","sensorCode":"LD.RED","sensorNameIt":"Pressione atmosferica","sensorNameDe":"Luftdruck","sensorNameLd":"Druch dl’aria","sensorUnitMeasure":"hPa","samplingDateTime":"2019-11-15T15:10:00","samplingValue":1006.9},{"stationCode":"89190MS","sensorCode":"GS","sensorNameIt":"Radiazione globale ","sensorNameDe":"Globalstrahlung","sensorNameLd":"Nraiazion globala ","sensorUnitMeasure":"W/m²","samplingDateTime":"2019-11-15T15:10:00","samplingValue":3.8},{"stationCode":"89190MS","sensorCode":"SD","sensorNameIt":"Durata soleggiamento","sensorNameDe":"Sonnenscheindauer","sensorNameLd":"Dureda dl surëdl","sensorUnitMeasure":"s","samplingDateTime":"2019-11-15T15:10:00","samplingValue":0.0}]
Run Code Online (Sandbox Code Playgroud)

有什么帮助吗?控制台应用程序项目 .net 核心 3.0.0 牛顿软件 12.0.3

在此处输入图片说明

Kla*_*con 50

System.Text.Json反序列化器的默认行为是将属性匹配为区分大小写。您需要传递选项告诉它匹配不区分大小写:

using System.Text.Json;

JsonSerializer.Deserialize<T>(json_data, new JsonSerializerOptions 
{
    PropertyNameCaseInsensitive = true
});
Run Code Online (Sandbox Code Playgroud)

  • 请注意每次传递序列化器选项的新副本:性能可能会受到影响:https://github.com/dotnet/runtime/issues/38982 (2认同)

Ali*_*aca 7

全局设置,在startup.cs中设置

    services.AddControllers(options =>
    {
    }).AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
        options.JsonSerializerOptions.Encoder = JavaScriptEncoder.Default;
    });
Run Code Online (Sandbox Code Playgroud)

  • 这个答案对我不起作用,因为我在 .net core api 中使用它。我必须传递反序列化方法本身中的选项。 (2认同)