【问题标题】:Deserialization Issue by NewtonsoftNewtonsoft 的反序列化问题
【发布时间】:2017-10-26 02:03:06
【问题描述】:

我想将这个Json反序列化为模型,这是 json:[{"dimensions": [ "www "], "metrics ": [{ "values ": [ "2 " ]},{ "values ": [ "0 "]}]}]

我创建了这个模型来反序列化 json 到这个模型:

public class ResultModel
{
    public List<string> dimensions { get; set; }
    public List<Metric> metrics { get; set; }
}

和

public class Metric
{
    public List<string> values { get; set; }
}

并为此使用Newtonsoft:

 var model = Newtonsoft.Json.JsonConvert.DeserializeObject<ResultModel>(json);

但它不起作用并给我这个错误:

'无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型 'ResultModel',因为该类型需要 JSON 对象(例如 {"name":"value"})才能正确反序列化'。

有什么问题?

【问题讨论】:

  • 您的 json 是数组(以“[”开头,以“]”结尾),因此您应该将其反序列化为 ResultModel[],而不是单个 ResultModel。
  • DeserializeObject&lt;IEnumerable&lt;ResultModel&gt;&gt;

标签: c# json deserialization


【解决方案1】:

很容易忽略您的 JSON 确实是数组,即使它只包含一个对象。所以你必须将它反序列化为数组:

var model = Newtonsoft.Json.JsonConvert.DeserializeObject<ResultModel[]>(json);

【讨论】:

    【解决方案2】:

    如果您确定最多只有一个模型,您可以这样做:

    var model = JsonConvert.DeserializeObject<IEnumerable<ResultModel>>(json).FirstOrDefault();
    

    否则,您应该按照 cmets 中的建议将其反序列化为模型集合:

    // models is an IEnumerable<ResultModel>
    var models = JsonConvert.DeserializeObject<IEnumerable<ResultModel>>(json);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-18
      • 2017-07-22
      • 2022-01-25
      • 2013-06-06
      • 1970-01-01
      相关资源
      最近更新 更多