簡體   English   中英

將 Json 反序列化為 C# 對象

[英]Deserialize Json into a C# Object

我知道這個主題之前已經發布過。 但我試着跟着他們。 但是,我的結果仍然沒有顯示出來。 我將不勝感激任何可能的幫助。 提前致謝。 :) 我收到以下錯誤: System.NullReferenceException: '未將對象引用設置為對象的實例。'

我正在嘗試將 JSON 對象反序列化為 ac# 對象以輸出屬性分數。

我從 json =toneAnalyzer.Tone(toneInput) 的 Json 輸出:

{
  "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; }
}

您要反序列化的對象有一個小錯誤。

您的根對象不是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屬性為NULL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM