У меня проблема с сериализацией XML из C #.
Мои занятия:
public abstract class AbstractFeldtyp
{
private string _name;
private string _beschreibung;
public string Name
{
get
{
return _name;
}
set
{
_name = value;
}
}
public string Beschreibung
{
get
{
return _beschreibung;
}
set
{
_beschreibung = value;
}
}
}
public class Feldtyp_A : AbstractFeldtyp {
public Feldtyp_A() {
Name = "My name is A";
Beschreibung = "I'm a A";
}
}
public class Feldtyp_B : AbstractFeldtyp {
public Feldtyp_B() {
Name = "My name is B";
Beschreibung = "I'm not a A!";
}
}
public class My_Root {
private AbstractFeldtyp[] felder;
public My_Root() {
Name = "My name is B";
Beschreibung = "I'm not a A!";
felder = new AbstractFeldtyp[] { new Feldtyp_A(), new Feldtyp_B()};
}
}
Теперь я хочу сериализовать «My_Root» в XML-файл.
public class Serializer
{
private XmlSerializer s;
private FileStream stream;
public Serializer()
{
/* This is not acceptable! I must be dynamically */
Type[] t = new Type[]
{
typeof(Feldtyp_A),
typeof(Feldtyp_B)
};
/* End */
s = new XmlSerializer(typeof(My_Root), t);
AbstractMaschinenTyp m = new MaschineTyp1();
this.SerializeObject(m);
}
public void SerializeObject(object obj)
{
stream = new FileStream(@"D:\File.xml", FileMode.Create);
if(obj != null)
s.Serialize(stream, obj);
stream.Close();
}
public object DeserializeObject()
{
stream = new FileStream(@"D:\File.xml", FileMode.Open);
object o = s.Deserialize(stream);
stream.Close();
return o;
}
Конечно, это работает. Но я не знаю во время компиляции, какие классы существуют ...
Мне нужен XML-файл, который выглядит следующим образом:
<?xml version="1.0"?>
<My_Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Felder>
<Feld>
<Feldtyp type="Feldtyp_A" />
</Feld>
<Feld>
<Feldtyp type="Feldtyp_B" />
</Feld>
</Felder>
</My_Root>
или
<?xml version="1.0"?>
<My_Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Felder>
<Feldtyp type="Feldtyp_A" />
<Feldtyp type="Feldtyp_B" />
</Felder>
</My_Root>
Мне не нужны свойства из "Feldtyp_AB". Тип достаточно. Спасибо за помощь:)