我有一个实现 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
。
我正在使用 XmlSerializer
序列化 SomeClass
,我可以手动序列化 SomeSerializableClass
,但如果它已经可以序列化,我为什么还要使用.NET 序列化类?那么我怎样才能将它序列化并将其传递给读取器/写入器呢?
最佳答案
您可以为该类型使用 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();
}
关于c# - 如何在使用 IXmlSerializable 的类中序列化可序列化数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7114124/