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; }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 5 из 5
Похожие ответы