簡體   English   中英

Json.net反序列化返回一個空對象

[英]Json.net deserialization is returning an empty object

我正在使用下面的代碼進行序列化。

var json = JsonConvert.SerializeObject(new { summary = summary });

summarySplunkDataModel類型的自定義對象:

public class SplunkDataModel
{
    public SplunkDataModel() {}

    public string Category { get; set; }
    public int FailureCount { get; set; }
    public Dictionary<string, SplunkError> FailureEntity { get; set; }
    public Dictionary<string, string> JobInfo { get; set; }
    public string JobStatus { get; set; }
    public int SuccessCount { get; set; }
    public List<string> SuccessEntity { get; set; }
    public int TotalCount { get; set; }
}

序列化導致下面的JSON:

{
  "summary": {
    "Category": "category",
    "JobStatus": "Failure",
    "JobInfo": {
      "Course processing failed": "" 
    },
    "TotalCount": 0,
    "SuccessCount": 0,
    "FailureCount": 0,
    "FailureEntity": {},
    "SuccessEntity": []
  }
}

現在,出於單元測試的目的,我需要反序列化它,但下面的代碼返回一個空值的對象。 我哪里錯了?

var deserialized = JsonConvert.DeserializeObject<SplunkDataModel>(contents);

在我這邊,這是因為我的房產沒有公共制定 而不是擁有

public class MyClass
{        
    public int FileId { get; }
}

我應該

public class MyClass
{        
    public int FileId { get; set; }
}

愚蠢的錯誤花了我幾個小時....

SplunkDataModel序列化為JSON時,將其包裝在具有summary屬性的對象中。 因此,當您將JSON反序列化回對象時,您需要使用相同的結構。 有幾種方法可以解決它; 他們都達到了同樣的效果。

  1. 聲明一個類來表示JSON的根級別並反序列化為:

     public class RootObject { public SplunkDataModel Summary { get; set; } } 

    然后:

     var deserialized = JsonConvert.DeserializeObject<RootObject>(contents).Summary; 
  2. 或者,通過示例反序列化為匿名類型的實例,然后從結果中檢索您的對象:

     var anonExample = new { summary = new SplunkDataModel() }; var deserialized = JsonConvert.DeserializeAnonymousType(contents, anonExample).summary; 
  3. 或者,反序列化為JObject,然后從中實現您的對象:

     JObject obj = JObject.Parse(contents); var deserialized = obj["summary"].ToObject<SplunkDataModel>(); 

暫無
暫無

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

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