我正在使用下面的代码进行序列化。
var json = JsonConvert.SerializeObject(new { summary = summary });
Run Code Online (Sandbox Code Playgroud)
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; }
}
Run Code Online (Sandbox Code Playgroud)
序列化产生以下JSON:
{
"summary": {
"Category": "category",
"JobStatus": "Failure",
"JobInfo": {
"Course processing failed": ""
},
"TotalCount": 0,
"SuccessCount": 0,
"FailureCount": 0,
"FailureEntity": {},
"SuccessEntity": []
}
}
Run Code Online (Sandbox Code Playgroud)
现在,出于单元测试的目的,我需要对其进行反序列化,但是下面的代码将返回一个空值的对象。我要去哪里错了?
var deserialized = JsonConvert.DeserializeObject<SplunkDataModel>(contents);
Run Code Online (Sandbox Code Playgroud)
当您将其序列SplunkDataModel化为 JSON 时,您将其包装在带有属性的对象中summary。因此,当您将 JSON 反序列化回对象时,您需要使用相同的结构。有几种方法可以解决这个问题;他们都取得了相同的结果。
声明一个类来表示 JSON 的根级别并反序列化为:
public class RootObject
{
public SplunkDataModel Summary { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后:
var deserialized = JsonConvert.DeserializeObject<RootObject>(contents).Summary;
Run Code Online (Sandbox Code Playgroud)或者,通过示例反序列化为匿名类型的实例,然后从结果中检索对象:
var anonExample = new { summary = new SplunkDataModel() };
var deserialized = JsonConvert.DeserializeAnonymousType(contents, anonExample).summary;
Run Code Online (Sandbox Code Playgroud)或者,反序列化为 JObject,然后从中具体化您的对象:
JObject obj = JObject.Parse(contents);
var deserialized = obj["summary"].ToObject<SplunkDataModel>();
Run Code Online (Sandbox Code Playgroud)在我这方面,是因为我没有财产的公开拍卖。而不是
public class MyClass
{
public int FileId { get; }
}
Run Code Online (Sandbox Code Playgroud)
我应该
public class MyClass
{
public int FileId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
愚蠢的错误花了我几个小时。