将Json反序列化为C#对象

时间:2020-02-21 11:44:59

标签: c# json

我知道此主题以前已发布。但是我尝试跟随他们。但是,我的结果仍然没有显示。我将不胜感激。提前致谢。 :)我收到以下错误:System.NullReferenceException:'对象引用未设置为对象的实例。'

我正在尝试将JSON对象反序列化为c#对象以输出属性得分。

我的JSON =的我的Json输出= toneAnalyzer.Tone(toneInput):

{
  "document_tone" : {
    "tones" :
      [
        {
          "score" : 0.70123,
          "tone_id" : "tentative",
          "tone_name" : "Tentative"
        }
      ]
    }
}

我执行了以下代码:

    var json = toneAnalyzer.Tone(toneInput); // this is my json source

    DocTone myResult = new DocTone();
    myResult = JsonConvert.DeserializeObject<DocTone>(json.Response);

    foreach (var myTone in myResult.tones)
    {
        Console.Write(myTone.Score);
        Console.ReadKey();
    }


    //  Console.WriteLine(myResult);
    //  Console.WriteLine(result.Response);

}

public class MyTone1
{ 
    [JsonProperty("score")]
    public double Score { get; set; }

    [JsonProperty("tone_id")]
    public string Tone_Id { get; set; }

    [JsonProperty("tone_name")]
    public string Tone_Name { get; set; }
}

public class DocTone
{
    [JsonProperty("tones")]
    public List<MyTone1> tones { get; set; }
}

1 个答案:

答案 0 :(得分:2)

您要反序列化的对象有一个小错误。

您的根对象不是-onbuild,而是实际上具有包含DocTone对象(通过DocTone元素)的属性的对象。

定义一个根对象(随便叫什么),然后反序列化为该对象:

document_tone

反序列化,然后通过public class RootObject { [JsonProperty("document_tone")] public DocTone DocTone { get; set; } } 属性访问:

DocTone

遇到RootObject myResult; myResult = JsonConvert.DeserializeObject<RootObject>(json.Response); foreach (var myTone in myResult.DocTone.tones) ... 的原因是因为当您反序列化到NullReferencException对象时,DocTone属性是tones