【发布时间】:2018-12-05 05:00:49
【问题描述】:
我正在尝试反序列化 JSON 文件并希望分配给对象 ScanResult。 var text 显示所有值,但扫描结果显示 null 一些 null 值。 https://gyazo.com/ff2ce386f845394c458a88d43a1f30d8
如果我遗漏了什么,请提出建议。 //MY json File SCAN Test 1-1543045410222.json 的代码
{
"at": 1543045410222,
"i": 1000,
"s": {
"Sensor1": ["OFF"],
"Sensor2": ["OFF"],
"DataReady1": ["OFF"],
"DataReady2": ["OFF"],
"CV1": [5.0],
"CV2": [6.0]
}
}
//ViewModel Code is as below:
public void ResendScanResult()
{
var ScanActivities = scanActivityManager.GetAll();
foreach (var item in ScanActivities)
{
var scanName = item.ScanName;
var dir = _dataFilePath + scanName + "\\";
var jsonFileName = string.Format("{0}{1}-{2}.json", dir, scanName, item.ScanDateEpoch);
string fileName = Path.GetFileName(jsonFileName);
// ScanResult scanResult = new ScanResult();
var text = File.ReadAllText(jsonFileName);
//var scanResults = JsonConvert.DeserializeObject<ScanResult>(text);
Common.Model.ScanResult scanResult = JsonConvert.DeserializeObject<Common.Model.ScanResult>(text);
var Mvm = MonitorViewModel.Instance;
// TargetProvider target = Mvm.GetTargetProvider(scanResult);
// Mvm.PublishToServer(target, scanResult);
}
}
我的 scanRescult 类代码如下:
namespace ABX.Common.Model
{
public class ScanResult
{
public ScanResult()
{
At = DateTimeOffset.Now.ToUnixTimeMilliseconds();
Interval = 1;
}
public string Name { get; set; }
public long At { get; set; }
public long Interval { get; set; }
public JObject Values { get; set; }
public string FileName { get; set; }
public JObject ToJson()
{
JObject json = new JObject
{
{ "at", At },
{ "i", Interval },
{ "s", Values }
};
return json;
}
【问题讨论】:
-
请发
jsonFileName的内容 -
@JonathanWilson 我发布了完整的方法,请查看代码。我在“文本”中获取所有值
-
为什么您希望这些值不为空?您有两个与 JSON 匹配的字段:
At和Interval。您的 JSON 文件有一个额外的字段S,而您的 C# 类没有。同样,您的 C# 类具有Name、Values和FileName,而您的 JSON 没有。 -
@SandyN 您的 C# 类应该与您尝试反序列化的 JSON 匹配。如果你的 JSON 有一个属性“Test”,那么你的 C# 类应该有一个相应的属性“Test”。您已经使用“At”对其进行了管理。
JObject应该适用于“s”,但您当前的JObject属性称为“Values”而不是“S”。 -
@JonathanWilson 谢谢你们。你解决了问题。
标签: c# json mvvm json-deserialization