[英]Json.net deserialization is returning an empty object
我正在使用下面的代碼進行序列化。
var json = JsonConvert.SerializeObject(new { summary = summary });
summary
是SplunkDataModel
類型的自定義對象:
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反序列化回對象時,您需要使用相同的結構。 有幾種方法可以解決它; 他們都達到了同樣的效果。
聲明一個類來表示JSON的根級別並反序列化為:
public class RootObject { public SplunkDataModel Summary { get; set; } }
然后:
var deserialized = JsonConvert.DeserializeObject<RootObject>(contents).Summary;
或者,通過示例反序列化為匿名類型的實例,然后從結果中檢索您的對象:
var anonExample = new { summary = new SplunkDataModel() }; var deserialized = JsonConvert.DeserializeAnonymousType(contents, anonExample).summary;
或者,反序列化為JObject,然后從中實現您的對象:
JObject obj = JObject.Parse(contents); var deserialized = obj["summary"].ToObject<SplunkDataModel>();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.