클래스로 직렬화 해제해야하는 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을 반환하고 설정자가 없습니다. 이 객체에 필수 매개 변수를 추가하려면 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을 역 직렬화 것인가?
getter 및 setter를 사용하여 속성에서 제대로 작동하는 DataContractJsonSerializer를 사용하려고했지만 JSON에서 RequiredParameters
속성을 발견했을 때 addParam을 호출하도록 사용자 정의 할 수있는 방법을 찾을 수 없었습니다. DataContractJsonSerializer 직렬화를 사용자 정의하는 간단한 방법이 있습니까?
또 다른 옵션은 JSON.NET을 사용하여 JSON을 탐색하고 수동으로 새 ReportDescription을 만들고 메서드를 호출하는 것입니다. DataContractJsonSerializer 또는 .NET 3.5의 상자 클래스에서 할 수 있습니까?