У меня есть два класса, которые наследуются от абстрактного классасериализация несколько объектов различных типов с JSON
public class Class1 : MainBaseClass
{
public int attrib1 {get; set;}
public int attrib2 {get; set;}
}
public class Class2 : MainBaseClass
{
public int attribx {get; set;}
public int attriby {get; set;}
}
Затем я создал список типа MainBaseClass для того, чтобы сериализовать оба класса в одной строке JSON, но я получил это исключение
исключение типа «System.Runtime.Serialization.SerializationException» произошло в System.Runtime.Serialization.dll, но не был обработан в пользовательском коде
Дополнительная информация: Тип 'MyProject.Class1' с данными контракта имя 'Class1: http://schemas.datacontract.org/2004/07/MyProject' не ожидается. Добавьте любые типы, не известные статически в список известных типов - например, с помощью атрибута KnownTypeAttribute или , добавив их в список известных типов, переданных в DataContractSerializer.
Мой метод делает это:
Class1 class1 = getData();
Class2 class2 = getData();
Package<MainBaseClass> package = new Package<MainBaseClass>();
package.AddObject(class1)
package.AddObject(class2);
//Here's the error
new ServiceClass().Serialize<Package<MainBaseClass>>(package);
Мой пакет класс
public class Package<T>
{
public List<T> Objects = new List<T>();
public Package() { }
public void AddObject(T dto)
{
this.Objects.Add(dto);
}
}
Мой метод сериализатору
public static string Serialize<T>(T entity)
{
MemoryStream stream = new MemoryStream();
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
//Here's the exception
ser.WriteObject(stream, entity);
stream.Position = 0;
StreamReader sr = new StreamReader(stream);
return sr.ReadToEnd();
}
Я также добавил [DataContract()] на MainBaseClass и дочерние классы и исключение сохраняются.
Он работает, только если я это сделаю, удалив [DataContract()] из базового класса и дочерних классов ранее. Если нет, то я получаю результаты, как пустая строка «{}»
Class1 class1 = getData();
Package<Class1> package = new Package<Class1>();
package.AddObject(class1)
string str = new ServiceClass().Serialize<Package<Class>>(package);
Или это:
Class1 class1 = getData();
string str = new ServiceClass().Serialize<Class1>(class1);
Итак, как я могу сериализировать несколько объектов разных типов?
Вы попробовали [Json.NET] (http://www.newtonsoft.com/json)? – Mehraban
Итак, если я понимаю, это было бы ограничением .net framework? Почему он вообще не работает? Тем временем я рассмотрю ваше предложение. Благодарю. –