我有一些JSON需要反序列化到类中。该类由一些简单的getter和setter组成,用于某些属性。其他属性是只读的,并通过该类上的方法进行初始化。例如:将JSON反序列化为.NET对象,同时保留封装
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并且没有setter。要将必需的参数添加到此对象中,您可以调用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的属性很好,但无法找到一种方法来定制它,以便在JSON中遇到RequiredParameters
属性时调用addParam。有没有一种直接定制DataContractJsonSerializer序列化的方法?
我考虑过的另一个选择是使用JSON.NET来浏览JSON并手动创建一个新的ReportDescription并调用它的方法。这可能与.NET 3.5中的DataContractJsonSerializer或其他一些开箱即用的类有关吗?