我正在使用下面的代码进行序列化。
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);
答案 0 :(得分:2)
将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>();
答案 1 :(得分:2)
在我这方面,是因为我没有财产的公开传承人。 不用
"CompanyProject\Models\Model1.Context.tt.
Error message is The custom tool 'TextTemplatingFileGenerator' failed."
CompanyProject\Models\Model1.tt.
Error message is The custom tool 'TextTemplatingFileGenerator' failed.**
我应该有
public class MyClass
{
public int FileId { get; }
}
愚蠢的错误花了我几个小时。...