【问题标题】:JSON won't deserialise fully to C# class [duplicate]JSON 不会完全反序列化为 C# 类 [重复]
【发布时间】:2016-09-27 18:53:43
【问题描述】:

我正在尝试反序列化一些如下所示的 JSON:

{
   "Results":{
      "Prediction":{
         "type":"table",
         "value":{
            "ColumnNames":[
               "HT",
               "AT",
               "X",
               "Y",
               "Z"
            ],
            "ColumnTypes":[
               "String",
               "String",
               "Double",
               "Double",
               "Double"
            ],
            "Values":[
               [
                  "Mum",
                  "Dad",
                  "0.172627246490883",
                  "0.171741768332677",
                  "0.65563098517644"
               ],
               [
                  "Father",
                  "Mother",
                  "0.391368227731864",
                  "0.21270005247278",
                  "0.395931719795356"
               ]
            ]
         ]
      }
    }
   }
  }

C# 类如下所示:

public class RootObject
{
    public Results Results { get; set; }
}

public class Results
{
    public Prediction Prediction { get; set; }
}

public class Prediction
{
    public string type { get; set; }
    public Value value { get; set; }
}

public class Value
{
    string[] ColumnNames { get; set; }
    string[] ColumnTypes { get; set; }
    string[][] Values { get; set; }
}

它反序列化到最终的属性“值”,这是不匹配的。如果我打开错误处理以查看为什么会出现以下错误:

Additional information: Could not find member 'ColumnNames' on object of type 'Value'. Path 'Results.Prediction.value.ColumnNames', line 1, position 64.

我有一个简单的 C# 示例,它重现了整个问题:

var derek = @"{""Results"":{""Prediction"":{""type"":""table"",""value"":{""ColumnNames"":[""HT"",""AT"",""X"",""Y"",""Z""],""ColumnTypes"":[""String"",""String"",""Double"",""Double"",""Double""],""Values"":[[""Mum"",""Dad"",""0.172627246490883"",""0.171741768332677"",""0.65563098517644""],[""Father"",""Mother"",""0.391368227731864"",""0.21270005247278"",""0.395931719795356""]]]}}}}";

var returnedObj = JsonConvert.DeserializeObject <RootObject> (derek, settings);

我很确定我的课程与 JSON 匹配。为什么不反序列化?

【问题讨论】:

标签: c# serialization json.net


【解决方案1】:

在 C# 属性中默认为私有,它们需要公开才能被 Newtonsoft/Json 拾取

public class Value
{
    public string[] ColumnNames { get; set; }
    public string[] ColumnTypes { get; set; }
    public string[][] Values { get; set; }
}

【讨论】:

    猜你喜欢
    • 2019-04-29
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 2021-06-02
    相关资源
    最近更新 更多