【问题标题】:How to deserialize JSON using Newtonsoft Deserialize C#如何使用 Newtonsoft 反序列化 C# 反序列化 JSON
【发布时间】: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 匹配的字段:AtInterval。您的 JSON 文件有一个额外的字段 S,而您的 C# 类没有。同样,您的 C# 类具有 NameValuesFileName,而您的 JSON 没有。
  • @SandyN 您的 C# 类应该与您尝试反序列化的 JSON 匹配。如果你的 JSON 有一个属性“Test”,那么你的 C# 类应该有一个相应的属性“Test”。您已经使用“At”对其进行了管理。 JObject 应该适用于“s”,但您当前的 JObject 属性称为“Values”而不是“S”。
  • @JonathanWilson 谢谢你们。你解决了问题。

标签: c# json mvvm json-deserialization


【解决方案1】:

重命名您的类属性以匹配您的 JSON,重命名您的 JSON 以匹配您的类属性,或者实现自定义 JsonConverter,您可以在其中实现任意映射。

【讨论】:

    猜你喜欢
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 2021-10-13
    相关资源
    最近更新 更多