【发布时间】:2020-11-20 08:56:38
【问题描述】:
我需要反序列化我的 json,我不应该在这里使用 jobject 类。我尝试使用 NewtonSoft Deserialize,但未能获得所需的结果。我总是得到空值。下面是适用于 jObject 解析的代码。请让我知道如何在不使用 jObject 的情况下进行反序列化。
带有 jObject 的代码
public DataClassifier GetCsvSchema1()
{
Uri schemaPath = new Uri("https://text.z16.web.core.windows.net/");
var schemaUri = new Uri(schemaPath, "DataFileCsvConfig.json");
using var client = new WebClient();
var json = client.DownloadString(schemaUri);
var schemajson = JsonSchema.FromJsonAsync(json);
var root = JObject.Parse(json);
var guestValues = root["DataClassifier"]["Classes"].ToObject<List<DataClass>>();
DataClassifierSettings gfd = new DataClassifierSettings();
gfd.Classes = guestValues;
DataClassifier dsc = new DataClassifier(gfd);
return dsc;
}
我在第 4 行得到的 json 示例如下:
{
"DataClassifier": {
"Classes": [
{
"Type": "Dput",
"SubType": "VitalSigns",
"Format": "csv",
"DataFileIncludePatterns": [
"**/italsigns*.csv"
],
"TableSchema": {
"Fields": [
{
"Name": "Time",
"Type": "DateTime",
"Source": [
"TimeStamp"
]
},
{
"Name": "FrameCounter",
"Type": "int"
},
{
"Name": "State",
"Type": "int"
},
{
"Name": "RPM",
"Type": "double"
},
{
"Name": "Distance",
"Type": "double"
},
{
"Name": "RespirationConfidence",
"Type": "double"
},
{
"Name": "HeartBPM",
"Type": "double"
},
{
"Name": "HeartDistance",
"Type": "double"
},
{
"Name": "HeartConfidence",
"Type": "double"
},
{
"Name": "MovementPowerSlow",
"Type": "double",
"Source": [
"MovementPowerSlow",
"movement_power_slow"
]
},
{
"Name": "MovementPowerFast",
"Type": "double",
"Source": [
"MovementPowerFast",
"movement_power_fast"
]
},
{
"Name": "MovementPowerStart",
"Type": "double",
"Source": [
"MovementPowerStart",
"movement_power_start"
]
},
{
"Name": "MovementPowerEnd",
"Type": "double",
"Source": [
"MovementPowerEnd",
"movement_power_end"
]
}
]
}
},
{
"Type": "Dtput",
"SubType": "tage",
"Format": "csv",
"DataFileIncludePatterns": [
"**/leepste*.csv"
]
},
{
"Type": "utput",
"SubType": sence",
"Format": "csv",
"DataFileIncludePatterns": [
"**/sence*.csv"
]
},
{
"Type": "PSG",
"SubType": "Type1",
"DataSetIncludePatterns": [
"PSG"
]
}
]
}
}
定义的类如下:
public class DataClassifierSettings
{
public List<DataClass> Classes { get; set; }
}
public class DataClass
{
public string Type { get; set; }
public string SubType { get; set; }
public string Format { get; set; }
public List<string> DataFileIncludePatterns { get; set; } = new List<string>();
public List<string> DataFileExcludePatterns { get; set; } = new List<string>();
public List<string> DataSetIncludePatterns { get; set; } = new List<string>();
public List<string> DataSetExcludePatterns { get; set; } = new List<string>();
public TableSchema TableSchema { get; set; }
}
public interface IDataClassifier
{
IEnumerable<DataClass> Classes { get; }
}
}
【问题讨论】:
-
NewtonSoft Deserialize but I am unsuccessful in getting the desired result.这是什么意思? JSON.NET 有效。你不需要 JObject。如果您的代码失败,则代码中存在错误,而不是库。发布您的代码 -
他对给定的 json 使用了错误的模型......他昨天问了类似的问题
-
没错,昨天我发布了代码,没有错误,我只是得到空值stackoverflow.com/questions/64916752/…
-
我投票结束这个问题,因为用户之前在stackoverflow.com/questions/64916752/…提出了完全相同的问题
-
如果你不想使用JObject,你可以创建一个类
public class DataClassifierSettings1 { public DataClassifierSettings DataClassifier { get; set; },并使用JsonConvert.DeserializeObject<DataClassifierSettings1>(json);,因为你的json显示一个对象有一个DataClassifier(这是一个模型DataClassifierSettings)}
标签: c# json asp.net-core .net-core json.net