C# JSON序列化类继承列表上的属性
我有一个模型如下:C# JSON序列化类继承列表上的属性,c#,json,asp.net-web-api,json.net,C#,Json,Asp.net Web Api,Json.net,我有一个模型如下: public class TestResultModel { public bool Successful { get; set; } public string ErrorMessage { get; set; } } public class TestResultListModel : List<TestResultModel> { public int TotalTestCases { get { return base.Count
public class TestResultModel
{
public bool Successful { get; set; }
public string ErrorMessage { get; set; }
}
public class TestResultListModel : List<TestResultModel>
{
public int TotalTestCases { get { return base.Count; } }
public int TotalSuccessful { get { return base.FindAll(t => t.Successful).Count; } }
}
当我检查JSON结果时,它确实包含所有的TestResultModel
s,但是TestResultListModel
(TotalTestCases
和totalsuccessful
)上的属性不可见
如何在JSON序列化对象中也包含这些值
我尝试的是使用
JSON.NET
并用属性[JsonProperty]
装饰属性,但没有成功。您的基本困难在于JSON有两种类型的容器:对象和数组。从:
- 数组是值的有序集合。数组以
(左括号)开始,以[
(右括号)结束。值由]
(逗号)分隔,
- 对象是一组无序的名称/值对。对象以
(左大括号)开始,以{
(右大括号)结束}
由于这些属性可以在客户端轻松地重建,因此可能需要做的工作比它的价值还多。(这个问题建议避免这种设计。)谢谢你详细的回答。我将重新考虑设计。:)
var testResultListModel = new TestResultListModel();
foreach (var testCaseId in new int[] {1,2,3,4})
{
var testResultModel = new TestResultModel
{
Successful = true,
ErrorMessage = "STRING"
};
testResultListModel.Add(testResultModel);
}
return testResultListModel;
[JsonObject]
public class TestResultListModel : List<TestResultModel>
{
public int TotalTestCases { get { return base.Count; } }
public int TotalSuccessful { get { return base.FindAll(t => t.Successful).Count; } }
}
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
public class TestResultListModel : List<TestResultModel>
{
[JsonProperty]
public int TotalTestCases { get { return base.Count; } }
[JsonProperty]
// Using Enumerable.Count() is more memory efficient than List.FindAll()
public int TotalSuccessful { get { return this.Count(t => t.Successful); } }
[JsonProperty]
TestResultModel[] Items
{
get
{
return this.ToArray();
}
set
{
if (value != null)
this.AddRange(value);
}
}
}
{
"TotalTestCases": 4,
"TotalSuccessful": 2,
"Items": [
{
"Successful": false,
"ErrorMessage": "STRING"
},
{
"Successful": true,
"ErrorMessage": "STRING"
},
{
"Successful": false,
"ErrorMessage": "STRING"
},
{
"Successful": true,
"ErrorMessage": "STRING"
}
]
}