Json.Net을 사용하고 여러 유형의 객체가 포함 된 목록을 직렬화 및 비 직렬화하려고합니다. 내 파생 된 형식의 개체를 포함하는 List로 끝나는 방법을 찾기 위해 고심하고 있습니다. 대신 기본 형식의 목록으로 끝납니다.Json.net을 사용하여 혼합 유형 목록 비 직렬화
내 코드 예제하게 그것을 무슨 일이 일어나고 있는지 꽤 명확 :
public class Vehicle{
public int wheels = 4;
}
public class Truck : Vehicle {
public int airhorns = 1;
}
static void Main (string[] args) {
List<Vehicle> vehicles = new List<Vehicle>();
vehicles.Add (new Vehicle());
vehicles.Add (new Truck());
foreach (Vehicle v in vehicles) {
Console.WriteLine ("Before deserializing, we have a: " + v.GetType());
}
string s = JsonConvert.SerializeObject (vehicles);
List<Vehicle> deserialized = JsonConvert.DeserializeObject<List<Vehicle>> (s);
foreach (Vehicle v in deserialized) {
Console.WriteLine ("After deserializing, we have a: " + v.GetType());
}
}
을 그리고이 실행 결과는 다음과 같습니다
Before deserializing, we have a: Vehicle
Before deserializing, we have a: Truck
After deserializing, we have a: Vehicle
After deserializing, we have a: Vehicle
나는 내 직렬화 복원의 트럭으로 끝낼 싶습니다 명부. 한 가지주의 할 점은 문자열 "s"의 json은 airhorn 변수를 포함한다는 것입니다. 그래서 그 데이터가 있습니다.
JSON 문서를 살펴본 결과 내가 찾고있는 것을 찾지 못했습니다. CustomCreationConverters (http://james.newtonking.com/json/help/index.html?topic=html/CustomCreationConverter.htm)를 해킹 해 보았는데 올바른 파생 클래스를 인스턴스화하는 데 잠재적으로 사용될 수있는 것처럼 보였지만 해당 메서드는 json 데이터를 제공하지 않으므로 형식을 결정할 수 없습니다.
"Class : Vehicle"또는 "Class : Truck"을 명시 적으로 정의 할 수있는 다른 필드를 추가 할 의향이 있지만 아직 사용 방법을 모르겠습니다. 어쩌면 올바른 클래스를 만든 후에는 새 객체에서 JsonConvert.PopulateObject를 사용할 수 있지만 json 파편을 처리해야합니다.
아이디어가 있으십니까? 감사!
오 와우, 나는 그 옵션을 전혀 보지 않았다. 완벽 해, 고마워! –