DataContractJsonSerializer не сериализует унаследованные типы - C#
Формулировка задачи:
всем привет. уважаемые гуру просветите или посоветуйте что делать.
Есть на сервере обьекты хранящиеся в List<Tank>, от класса Tank наследуется разные классы (тяжелый танк, легкий танк, быстрый танк). Тоесть имеем в листе упакованные обьекты. Нужно етот лист сериализовать в JSON и отправить на клиент. И тут проведя кучу опытов пришел к тому что упакованные обьекты в базовый тип нельзя серриализовать. Что делать как бороться ?
using System.Runtime.Serialization.Json;
using System.Runtime.Serialization;
Решение задачи: «DataContractJsonSerializer не сериализует унаследованные типы»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
namespace ConsoleApplication2 {
class Program {
static void Main(string[] args) {
List<Person> persons = new List<Person> {
new Person{Id=0,Name="Tom", Age=10},
new Student{Id=1,Name="Mary", Age=23, Group=12},
new Teacher{Id=2,Name="Harry", Age=36, TeacherGroup=19}
};
using (FileStream stream = File.OpenWrite(@"C:\Test.json")) {
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(List<Person>));
serializer.WriteObject(stream, persons);
}
}
}
[DataContract]
[KnownType("GetKnownTypes")]
public class Person {
[DataMember]
public int Id { get; set; }
[DataMember]
public int Age { get; set; }
[DataMember]
public string Name { get; set; }
static Type[] GetKnownTypes() {
return new Type[] { typeof(Student), typeof(Teacher) };
}
}
[DataContract]
public class Student : Person {
[DataMember]
public int Group { get; set; }
}
[DataContract]
public class Teacher : Person {
[DataMember]
public int TeacherGroup { get; set; }
}
}