2011-05-03 2 views
0

나는 serialising 및 Json.NET 사용 및 JSON에서 deserialising하고 다음 수업을 :파생 클래스를 사용하는 C# 클래스에 JSON 객체를 어떻게 직렬화하지 않습니까?

public class Message 
{ 
    public Guid MessageId { get; set; } 
    public List<Task> Tasks { get; set; } 
} 

public class Task 
{ 
    public int TaskId { get; set; } 
} 

public SomeTask : Task 
{ 
    public string SomeTaskThing { get; set; } 
    public List<string> Operations { get; set; } 
} 

public OtherTask : Task 
{ 
    public int OtherTaskThing { get; set; } 
    public List<int> MoreOtherTaskThings { get; set; } 
} 

Message 기본적으로 내가 메시지 프로세서에 와이어를 가로 질러 통과 SomeTaskOtherTaskTask의 목록으로 구성 또한이 수업에 대해서도 알고 있습니다.

I에는 직렬화 할 때 Message 나는 다음을 수행 : 내가 JSON에 포함 $type 이름과 함께 기대하는 것처럼

string json = JsonConvert.SerializeObject(
     message, 
     Formatting.Indented, 
     new JsonSerializerSettings 
      { 
      TypeNameHandling = TypeNameHandling.Objects 
      }); 

내 파생 클래스가 직렬화합니다.

그러나 JSON 문자열을개체로 deserialize하면 deserialiser가 파생 클래스 개체를 다시 확보하지 못합니다. 방금 기본 클래스 Task의 목록을 얻습니다.

TypeNameHandling = TypeNameHandling.Objects을 사용하여 $type을 JSON 문자열에 추가했다고 생각하면 인스턴스화 할 클래스에 대한 힌트가 deserialiser에 제공되었을 수 있지만 잘못되었습니다.

기본 클래스가 Task 인 객체를 역 직렬화하고 파생 클래스를 List<Task>으로 재수 화하려면 어떻게해야합니까?

이 프로젝트에서는 .NET Framework 3.5로 제한됩니다.

답변

3

동일하게 JsonSerializerSettings을 사용하여 역 직렬화해야합니다. 동일한 인스턴스 일 필요는 없지만 비 직렬화 작업을 수행하려면 TypeNameHandling = TypeNameHandling.Objects을 설정해야합니다.

+0

아 ... 저의 사각 지대에 완전히 맞았습니다. 감사. – Kev

관련 문제