我有一个类IXmlSerializable
类,如下所示:
public class SomeClass : IXmlSerializable
{
public SomeSerializableClass ClassA { get; set; }
public SomeNonSerializableClass ClassB { get; set; }
public void ReadXml(XmlReader reader)
{
reader.ReadStartElement("RootElement");
do
{
if (reader.Name == "SomeNonSerializableClass")
{
// Perform custom serialization
}
else if (reader.Name == "SomeSerializableClass")
{
// I just want to use the SomeSerializableClass's
// already implemented serialization process here.
}
}
while (reader.Name != "RootElement");
reader.ReadEndElement();
}
}
让我们看一下这个例子的ReadXml
实现。我有两个类,一个是名称SomeNonSerializableClass
,这就是SomeClass
类已实现IXmlSerializable
的原因。然后,我也使用SomeSerializableClass
,可以使用XmlSerializer
进行原生序列化。
我正在使用SomeClass
序列化XmlSerializer
,我可以手动序列化SomeSerializableClass
,但为什么我可以使用.NETs序列化类序列化它?那么我怎样才能将它序列化并传递给读者/作者?
答案 0 :(得分:2)
您可以将XmlSerializer
用于该类型。类似的东西:
public void ReadXml(XmlReader reader)
{
reader.ReadStartElement("SomeClass");
do
{
if (reader.Name == "ClassB")
{
reader.ReadStartElement();
// manually deserialize SomeNonSerializableClass here
reader.ReadEndElement();
}
else if (reader.Name == "ClassA")
{
reader.ReadStartElement();
var serializer = new XmlSerializer(typeof(SomeSerializableClass));
ClassA = (SomeSerializableClass)serializer.Deserialize(reader);
reader.ReadEndElement();
}
}
while (reader.Name != "SomeClass");
reader.ReadEndElement();
}
public void WriteXml(XmlWriter writer)
{
writer.WriteStartElement("ClassB");
// manually serialize SomeNonSerializableClass here
writer.WriteEndElement();
writer.WriteStartElement("ClassA");
var serializer = new XmlSerializer(typeof(SomeSerializableClass));
serializer.Serialize(writer, ClassA);
writer.WriteEndElement();
}