我有一些 JSON 需要反序列化为一个类。该类由一些用于某些属性的简单 getter 和 setter 组成。其他属性是只读的,并通过该类的方法进行初始化。例如:
public class ReportDescription
{
public int Id { get; set; }
public int Title { get; set; }
public string Group { get; set; }
public IEnumerable<Param> RequiredParameters { get; }
public IEnumerable<Param> OptionalParameters { get; }
public void addParam(Param param) { /* add the param to the internal collection */}
}
该RequiredParameters
属性返回 IEnumerable 并且没有设置器。要将所需参数添加到此对象,您将调用 addParam 执行一些业务逻辑并将参数添加到对象内部集合。
我的 JSON 看起来像这样:
[
{
"ReportId": 1,
"DisplayName": "Report One",
"Group": "Group One",
"RequiredParameters": [],
"OptionalParameters": [],
},
{
"ReportId": 2,
"DisplayName": "Report Two",
"Group": "Group Two",
"RequiredParameters": ["Param1", "Param2"],
"OptionalParameters": [],
}
]
我如何将此 JSON 反序列化为上述类?
我尝试使用 DataContractJsonSerializer,它适用于具有 getter 和 setter 的属性,但无法找到一种方法来自定义它以在遇到RequiredParameters
JSON 中的属性时调用 addParam。是否有一种直接的方法来自定义 DataContractJsonSerializer 序列化?
我考虑的另一个选项是使用 JSON.NET 遍历 JSON 并手动创建一个新的 ReportDescription 并调用它的方法。这可能与 DataContractJsonSerializer 或 .NET 3.5 中的其他开箱即用类有关吗?