2013-11-27 3 views
2

Здравствуйте, я новичок в C#, и я пытаюсь сериализовать некоторые данные. У меня есть базовый класс, который реализует ISerializable и другие подклассы, которые расширяют базовый класс. В моем базовом классе я написал:C# serialization

protected BaseClass(SerializationInfo info, StreamingContext context) 
{ 
    if (info == null) 
     throw new System.ArgumentNullException("info"); 
} 

[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)] 
public virtual void GetObjectData(SerializationInfo info, StreamingContext context) 
{ 
    if (info == null) 
     throw new System.ArgumentNullException("info"); 
} 

Проблема заключается в том, что когда я запускаю свою программу, я получаю эту ошибку о том, что мои подклассы не помечаются как сериализации. Это большой проект. У меня есть класс учеников class Student : ISerializable, который является базовым классом, и у меня есть GraduateStudent : Student и PhDStudent : Student. Когда я пытаюсь сериализовать список студентов (может быть Student, GraduateStudent или PhDStudent), я получаю ошибку выше. Кроме того, я пытался писать как этот PhDStudent : Student,ISerializable, но без успеха

+6

Затем отметьте как '[Serializable]' :) –

+0

Я сделал это, но получаю ту же ошибку – user3043278

+0

Мы можем работать только с информацией и примером. Пожалуйста, включите это в приведенный выше пример. – StingyJack

ответ

0
public abstract class BaseClass 
{ 

} 

public class Child1:BaseClass 
{ 

} 

public class Child2:BaseClass 
{ 

} 

public class SeriliazerTest 
{ 
     // You have to define them here, otherwise they will not be found 
     [XmlArrayItem(Type = typeof(Child1), ElementName = "Child1")] 
     [XmlArrayItem(Type = typeof(Child2), ElementName = "Child2")] 
     public BaseClass[] Child {get;set;} 
} 
+1

ISerializable и сообщение об исключении предлагают BinaryFormatter. На самом деле, это не будет корректно работать в XnlSerializer - отсутствует маркер XmlIncludeAttribute –

+0

Спасибо @MarcGravell Извините, я не видел, что он хочет, чтобы BinaryFormatter сегодня плохой день для меня. Я не могу получить какие-либо оценки. Lol –

+0

На самом деле я никогда не хотел так сложно. Я хочу только сериализовать список моих учеников. В java я сделал это очень легко, но C# дает мне головные боли. – user3043278

1

Если жалуются, что они не помечаются как сериализации: затем сделать. Каждый тип модели (а не только базовый тип) должен быть обозначен [Serializable]. На самом деле, очень редко вам нужно реализовать ISerializable здесь. Я настоятельно рекомендую вам этого не делать, и просто позвольте сериализатору беспокоиться о полях, пока вы точно не узнаете, что вы делаете ...

. .. потому что, когда вы знакомы с ним, вы, вероятно, найдете множество причин, чтобы не слепо использовать BinaryFormatter - он может быть ужасно хрупким, а версии нетерпимы. Если это не означает, что «нужно запускать только один раз», я бы настоятельно предложил альтернативы, такие как XmlSerializer, DataContractSerializer, json.net или protobuf-net.